是的。在本身不存在,n要真的,但委託從document
(DOM的根)的所有事件不意味着所有點擊事件,包括那些你會被至少部分地處理並不感興趣:
$(document).on('click', '$another-id', function(){});
是一個特別糟糕的主意,在這方面:你的單一元素之後的時候,但如果我在身體的任意位置單擊,JQ會做這樣的事情:
if (event.target.id == 'another-id')
{
return callback.call(event.target, $(event));//where callback is the anonymous function you passed to on
}
return event;
所以所有點擊事件導致函數調用。這可能會降低您的用戶界面。
絕不應該停止委託事件,但明智地綁定聽衆。例如,如果您想要使用的所有DOM元素都包含在#container
div中,那麼請將您的聽衆綁定到那裏。如果要處理導航事件,請將偵聽器綁定到包含所有導航元素的節點之後
除此之外,如果您取消某個事件,但未成功返回stopPropagation,則該事件仍將最終調用所有導航元素你的其他聽衆可能會排隊。 Returnign false
也會造成麻煩,視爲,在jQ中,return false
被翻譯爲e.preventDefault(); e.stopPropagation()
。
$(document).on('click', 'a', function(){});//is called for all links
$(document).on('click', 'a.navigation', function(){});//is called for navigation
:因此,與嵌套元素打交道時,如果你想處理在你的網頁鏈接點擊,但也像<a class='navigation'>
元素,無論是處理器可能被稱爲,根據所使用的選擇要慎重哪個會被首先調用?你會想要在給定的情況下使用?有閃失這裏,不應該有:
$('#navContainer').on('click', 'a.navigation', function(){});//is called for all links
至少使事情稍微更安全,更清晰,更輕了。
如果你想委託的事件時,使用ID選擇器和元素在DOM已經存在,不委託:
$('#another-id').on('click', function(){});
較短,並有可能甚至會更快呢
我不這麼認爲......你應該沒事... –
這可能會成爲一個問題的規模;沒有一攬子答案。 – Mathletics
關於您的更新,不,我不會等待那裏出現性能問題。 jQuery擺脫了'.live()'方法的原因。即使他們眼下沒有明顯的好處,對於明智的做法也有一些東西要說。 –