我在開發jQuery插件時偶然發現了事件namespacing的一個問題。jquery event namespace bubbling問題
下面是HTML
<div class="parent">
<div class="child">
</div>
</div>
<a class="btn-a">trigger a</a>
<a class="btn-b">trigger b</a>
<a class="btn-c">trigger c</a>
這裏是jQuery的
jQuery('#content div.child')
.bind('a.a',function(){alert('a-child');})
.bind('a.b',function(){alert('b-child');})
.bind('a.c',function(){alert('c-child');});
jQuery('#content div.parent')
.bind('a.b',function(){alert('b-parent');})
.bind('a.c',function(){alert('c-parent');});
jQuery('a.btn-a')
.click(function(){
jQuery('#content div.child').trigger('a.a');
});
jQuery('a.btn-b')
.click(function(){
jQuery('#content div.child').trigger('a.b');
});
jQuery('a.btn-c')
.click(function(){
jQuery('#content div.child').trigger('a.c');
});
總之,我附上一個命名空間中的事件監聽器給孩子和家長創造三個按鈕觸發每個事件(aa,ab,ac)。請注意,父級只能監聽a.b和a.c.當我點擊觸發a.a的按鈕時,只有a.a的div.child監聽器被觸發,但整個'a'命名空間事件冒泡到div.parent監聽器a.b和a.c,並觸發它們。我的問題是,我仍然會如何使用事件命名空間,但只有預期的事件會冒泡(即a.a是唯一一個會觸發孩子和父母的事件)。我知道stopPropagation並停止ImmediatePropagation。我不想把這些放在孩子a.b和a.c聽衆身上,因爲有時候我確實希望他們泡泡。例如,當我觸發孩子的'a.b'時,我期望'a.b'和只有'a.b'事件由孩子和父母處理。
感謝
感謝尼克,這正是它。我看到了文檔,但沒有連接,我倒退了。 – 2010-04-29 22:37:48