2011-11-25 45 views
4

HTML:裏面的div> div的jQuery的delegateing> A也:(

<div id="a"> 
    <a id="a0" href="#"></a> 

    <div id="b"><a id="b0" href="#"></a><div> 
<div> 

的jQuery:

$('#a').delegate('a', 'click', function(){ //do stuff }); 

代表#B0,以及是否有辦法忽略#B任何聰明的選擇方式。 ?

NB ///內div的鏈接添加和動態分離///

TY

+0

好問,upvoted :) –

+0

值得注意的是,雖然'.delegate()jQuery中1.7+,新的'。對()支持''函數替換它因此更具前瞻性(1.7通常也提高了事件綁定的性能)。語法幾乎相同,除了事件('click')和選擇器(樣例中的'a'或Luke推薦的變體)被顛倒。 –

+0

**。on()vs .delegate()**:性能速度和瀏覽器兼容性如何? –

回答

5

,如果你知道它的唯一的直接後裔嘗試

$('#a').delegate('#a>a', 'click', function(){ alert('a') }); 

如果你知道你要忽略B的孩子嘗試

$('#a').delegate('a:not(#b>a)', 'click', function(){ alert('a') }); 

編輯:a fiddle

+0

謝謝:),從來沒有向我做過讓代表 –

+0

中的選擇器無後顧之憂。僅供參考,我會考慮使用類來識別您的元素,因爲它稍後會使重構變得更容易(並且更明顯是怎麼回事) –

0

這是按預期工作。您的delegate()電話會爲#a下的所有匹配選擇器a的孩子設置事件處理程序。

如果你想設置的處理程序爲一個特定的元素,然後做

$('#a0').click(function(){ ... }); 

而且你的HTML是相當壞了。確保關閉標籤實際上關閉。

+0

'.click()'別名將偵聽器設置爲self。大多數人使用'.delegate()'''.on()'(作爲委託工具),因爲他們不需要這個。 –

+0

@GregPettit這不是我如何閱讀他的問題,但如果我們假設'aX'錨點也是動態添加的,那麼是的。 –

-1

委託方法的第一個字段是選擇器。截至目前,你正在選擇所有的錨點。改用ID。

+0

他希望它爲任何'a'工作,除了在#b –

+0

之後,他可以將它們歸類到一個類中。 –

+0

完全正確:)我甚至對這個問題做了評論。這可能是一個好主意,如果你推薦你的答案,包括你的建議,而不是你原來的不正確(可能誤導?) –

-1

jQuery1.7以上

$('#a').on('click', '#a0', function(event) { 
    alert(event.target.id); 
}); 
+0

正如我在其他地方所評論的那樣,他基本上希望'活'事件(所以委託給父母),所以他可以動態地添加元素,而不必綁定他們的事件。 –