jQuery -为什么委托传播,即使在“e”之后.preventDefault '被调用
jQuery - why does delegate propagate, even after `e.preventDefault` is called?
我有一个嵌套链接的div。div对'click'
有一个delegate
处理程序,它会警告"div"。div中的链接也有一个delegate
处理程序用于'click'
,其中e.preventDefault();
在警告"link"之前被调用。当我点击链接时,我看到了"Div"警报和"Div"警报。我不清楚为什么会发生这种情况,因为我试图阻止链接的点击处理程序的传播。
$('body').delegate('.outer', 'click', function(e){
e.preventDefault();
alert('Div');
});
$('body').delegate('.outer a', 'click', function(e){
e.preventDefault();
alert('Link');
// Note: I've also tried returning false (vs using preventDefault), per the docs
});
HTML
<div class="outer">
<a href="#">Click me</a>
</div>
- PreventDefault不会阻止传播,它会阻止默认动作被采取。
-
返回false/stopPropagation对委托/活动事件不起作用,因为当它到达定义事件的元素时,它已经向上传播了。它将阻止传播到DOM中更高的元素,但不会阻止调用同一级别(或更低级别)的处理程序。请参阅http://api.jquery.com/delegate文档。
因为.live()方法在事件传播到顶部的文档,是不可能停止传播的生活事件。类似地,.delegate()处理的事件也会传播他们被委派的元素;绑定的事件处理程序在DOM树中低于它的任何元素都已经被执行了到调用委托事件处理程序时。这些处理程序,因此,可能会阻止委托处理程序触发调用event.stopPropagation()或返回false。
-
如果你不希望在同一级别/DOM元素的其他处理程序运行,你可以使用stopImmediatePropagation。注意,应用处理程序的顺序很重要。
你可能应该使用on(),而不是像jQuery 1.7那样使用delegate/live。
您应该使用e.stopPropagation()
来阻止您的事件冒泡
相关文章:
- 我怎样才能制作一个“;reverse preventDefault”;在jQuery中
- IE7 preventDefault()无法处理跳过链接
- e.preventDefault在表单提交时被忽略
- preventDefault而不删除html5验证
- event.preventDefault阻止ajax调用
- jQuery preventdefault提交表单没有'通过js函数提交表单时无法工作
- 事件发生后重定向到主页.preventDefault.
- 是preventDefault()一个jQuery函数或javascript函数
- preventDefault之后的重新启动事件
- preventDefault()赢得'It’我不管用
- 为什么使用e.preventDefault的if语句?-拖放javascript
- event.preventDefault() 不会在 jQuery Mobile 中取消链接方向
- preventDefault() 类似于 javascript 中的功能
- e.preventDefault() in ie8
- 如果父元素具有 preventDefault,如何将单击传播到子元素
- Javascript - jQuery preventDefault method
- Javascript-匿名函数中使用参数引用全局函数的闭包-我如何使用preventDefault
- 如何查找导致preventDefault的原因,该preventDefault会覆盖正常的单击行为
- 如果存在event.preventDefault函数,则ajaxForm不起作用
- Javascript preventDefault operation