尝试使用jquery事件。
似乎如果我在自己的事件处理程序中删除一个项目,它会阻止事件冒泡到委托事件,但直接绑定的事件仍然会触发。
但是,如果我在委托事件中删除它,事件会像我期望的那样传播。
由于我没有返回false或使用stopPropagation(),我认为其他事件仍将触发,无论它们是否直接绑定或委派。
这有意义吗?这是jQuery的错误吗?寻找解释为什么它表现得像这样。
这里是小提琴: http://jsfiddle.net/ahhgu1bb/
当您点击蓝点时,' A UP ...'永远不会出现在控制台中。
单击它的绿点时。
代码:
html:
<div class="main-background">
<div class="inner-area">
<div class="blue-point"></div>
<div class="green-point"></div>
</div>
</div>
javascript / jquery:
$('.main-background').on('mousedown', '.inner-area', function(e) {
console.log('A DOWN - deletegated inner-area mouse down');
});
$('.main-background').on('mouseup', '.inner-area', function(e) {
console.log('A UP - deletegated inner-area mouse up');
});
$('.main-background').on('mouseup', function(e) {
console.log('B UP - direct inner-area mouse up');
});
$('.blue-point').on('mouseup', function(e) {
console.log('C UP - direct point mouse up');
$(this).remove();
});
$('.main-background').on('mouseup', '.green-point', function(e) {
console.log('D UP - delegated point mouse up');
$(this).remove();
});
答案 0 :(得分:1)
来自jQuery文档: http://api.jquery.com/on/
对于委派活动:
...当事件直接发生在绑定元素上时,不会调用处理程序,但仅适用于与选择器匹配的后代(内部元素)。 jQuery将事件从事件目标起泡到附加处理程序的元素(即最里面到最外层的元素),并为该路径上与选择器匹配的任何元素运行处理程序。
所以看起来如果我使用事件委托,事件实际上并不直接绑定到附加元素,而是仅从目标元素冒泡触发。
所以在我的情况下,由于在开始冒泡之前移除了目标元素,因此不会发生冒泡(对Amin Jafari赞不绝口!),因此委托事件永远不会触发。但是任何直接绑定的事件处理程序都会被触发。