2010-08-22 23 views
2

有幾種方法可以像錨標籤定義按鍵動作:的標籤,然後單擊事件HREF = 「JavaScript的:創建my_function()」 VS的onclick = 「創建my_function()」 或

<a href="javascript: void(0)" onclick="funciton_X()">click here</a> 

<a href="javascript: funciton_X()">click here</a> 

<a id="a_tag" href="javascript: void(0)">click here</a> 
<script type="text/javascript"> 
$('#a_tag').click(function(){}) 
</script> 

有哪一個我​​會用一個顯著差異?他們的優點和缺點是什麼。有第四種選擇嗎?

回答

3

最後一個被稱爲unobtrusive javascript,這是我推薦你使用的一個,因爲它主張在你的標記和JavaScript之間清晰分離。它還具有較小標記文件的優點,而外部JavaScript文件將由客戶端瀏覽器緩存。

正如@David Dorward在評論部分指出的,如果您使用的是最後一種方法,建議href屬性指向一些真實的URL,以便客戶端將被重定向,例如,如果他禁用了javascript。當您定義網站的最小標記時,此技術被稱爲progressive enhancement,並且基於客戶端瀏覽器功能,您可以使用諸如AJAX和其他一些不錯的UI效果等標記所不具備的功能進行充實。

所以總結:

<a id="a_tag" href="basic.htm">click here</a> 

,然後在一個單獨的JavaScript文件(例如與jQuery但你可以使用任何你喜歡):

$(function() { 
    $('#a_tag').click(function() { 
     // TODO: some nice effect 
     return false; 
    }); 
}); 
+1

如果最後一個真的不顯眼,那麼'href'會指向某個有用的地方。 – Quentin 2010-08-22 18:29:10

+0

@David Dorward,我同意你的意見。將答案中包含您的評論。 – 2010-08-22 18:31:03

+0

很好的答案,謝謝你們兩位。 – 2010-08-22 18:41:32

0

我更喜歡後者。將你的javascript從你的html中分離出來是很好的做法,並且可以更容易地維護代碼。像JQuery,Prototype,Mootools等這樣的Libaries對此有很大的幫助。這與在外部樣式表和內聯樣式中做CSS非常相似。首選項是讓它們保持分離,使您能夠生成乾淨和語義化的html。

再舉一個例子:

<form id="myForm"> .... </form> 

說我要提交此表,但我想這樣做的異步,我可以使用jQuery附加一個事件,這將通過AJAX提交,如果javascript不可用,它會很好地降低標準回傳。

0

您需要在函數中添加this.preventDefault();

// sry我不知道如何添加評論DarinDimitrov的答案。

+0

爲什麼我們需要這個? – 2010-08-22 19:15:52

+0

有沒有必要補充說。 jQuery爲你做。此外,'preventDefault'是Event對象的一種方法,而不是事件目標。 – 2010-08-22 22:22:16