2011-12-09 78 views
5

假設我只是想附上一個簡單的點擊處理程序的元素,我一直在做這樣的:我應該使用.on()還是.click()附加事件處理程序?

$("#mydiv").click(function() { ... }); 

望着JQuery的文檔,似乎.on()是「建議」的方式附加事件處理程序並替換.bind().delegate().live()

在jQuery 1.7中,。對()方法提供用於附接的事件處理程序所需 所有功能。有關從舊jQuery 事件方法轉換的幫助,請參閱.bind(),.delegate()和.live()。

而且在.click()它說的文檔:

這種方法是在頭兩個變化對.bind快捷方式( '點擊',處理程序),並.trigger('點擊')在第三。

因此,這意味着.click()使用.bind()將由.on()被棄用,取而代之,是吧?或者暗示.click()會堅持下去,但它會在某種程度上成爲.on("click")的快捷方式?

基本上,我的問題是這樣的......當今天從事寫作的jQuery代碼,我應該使用:

Variant 1: $("#mydiv").click(function() { ... }); 

或:

Variant 2: $("#mydiv").on("click", function() { ... }); 

+0

您不必擔心遺留代碼,他們不太可能會完全刪除點擊速記。 .on()處理程序只是附加事件處理程序的一種更有效的方式,從能夠同時附加多個事件處理程序到向映射事件添加額外信息! – Khez

回答

4

就我個人而言,我會使用on()所有來自jQuery 1.7+的事件綁定。

這意味着動態添加的元素與頁面加載時可用的元素之間不存在歧義。

而且,你的狀態,click()(和其他事件的快捷方式)通過jQuery的反正轉化爲on("event", function() { ... });,所以它保存在過程中的一步 - 不,這使得課程的顯着差異。

最後,on("click")在我看來更好。

+0

該文檔聲明.click()被轉換爲.bind()而不是.on()。這就是我困惑的原因。 – njr101

+2

1.7+'click()'被轉換爲'on()'。我猜他們還沒有更新文檔。 –

+0

感謝Rory的回答。我查看了JQuery 1.7源代碼來確認 - 不是我不信任你;).click()調用事實上已經轉換爲.bind(),正如文檔所說的。但.bind()又轉換爲.on()。所以是的,你是完全正確的。 – njr101

相關問題