2010-09-08 5 views
6

Vì vậy, có 4 phương pháp chính mà tôi biết để thực thi mã javascript từ một liên kết. Đối với yêu cầu của tôi, tôi cần phải làm như vậy mà không cần di chuyển màn hình bất cứ nơi nào (liên kết đến # và không trả về false là xấu). SEO cho mã javascript được thực thi, nếu có thể, cũng quan trọng. Vì vậy, cách thích hợp để làm điều này là gì?Cách thích hợp cho các liên kết để thực thi mã javascript

phương pháp 1 (cần phải chắc chắn MyCode() trả về false luôn): (? Dường như làm cho ý nghĩa nhất)

<a href="#" onclick="return myCode();">execute</a> 

phương pháp 2:

<a href="javascript:myCode();">execute</a> 

phương pháp 3:

<a href="javascript:void(0);" onclick="myCode();">execute</a> 

phương pháp 4 (không dễ chịu theo ngữ nghĩa như những người khác tôi nghĩ):

<span id="executeMyCodeLink" class="link">execute</a> 
<script> 
$('#executeMyCodeLink').click(myCode); 
</script> 

với phương pháp 4, bạn có thể sử dụng onclick cũng tất nhiên ..

Trả lời

5

Bạn làm cho trang không nhảy và sử dụng thẻ "a" với href và phương pháp 4 bằng cách sử dụng preventDefault.

<a id="executeMyCodeLink" href="#">execute</a> 
<script> 
    $('#executeMyCodeLink').click(function(event) { 
    event.preventDefault(); 
    myCode(); 
    }); 
</script> 

Điều quan trọng là bao gồm href vì liên kết sẽ không đúng kiểu và html của bạn sẽ không xác thực khác.

+0

Điều này dường như làm cho ý nghĩa nhất, tôi thích rằng jQuery có một cơ chế cho điều này mà không dựa vào sai lầm trả về mà có hậu quả khác. –

2

<a href="#_"> cũng hoạt động, theo cách đó bạn không cần return false. (Bất kỳ neo không tồn tại nào cũng sẽ hoạt động).

Ngoài ra, phương pháp 4 chỉ hoạt động nếu bạn sử dụng jQuery. Hầu hết các trang web của tôi chỉ có một hoặc hai hiệu ứng javascript nhỏ, tôi không tải jQuery cho điều đó.

+0

Thú vị, tôi không biết điều đó.Điều này cũng giúp vì nếu bạn đang sử dụng jQuery, trả về false sẽ ngăn chặn chuỗi tiếp tục. – GSto

0

Sử dụng jquery là cách không phô trương để xử lý cuộc gọi javascript. Vì vậy, tôi sẽ nói phương pháp 4. Bạn cũng có thể chỉ cần làm:

$(a#linkId).click(...); 
0

Tôi thích phương pháp 4, quá.

Sự kiện ràng buộc với đối tượng dom một cách riêng biệt là một cách thanh lịch hơn và tôi nghĩ đó là thói quen lập trình tốt.

0

Tôi cũng thích phương pháp 4. Bất cứ khi nào có thể tôi cố gắng không đặt bất cứ điều gì trực tiếp trong các thuộc tính thậm chí hoặc để viết js trực tiếp vào href. Tôi làm điều này bởi vì trong hầu hết các trường hợp bị bệnh thực sự đặt một url không phải là js như href để nó làm suy yếu cho các trình duyệt không được kích hoạt js. Tiếng vang thứ hai là tôi không thích gây ô nhiễm các yếu tố với cruft :-)