防止点击事件影响父级jQuery元素

5

我需要停止子元素向父元素传递事件,我有一堆包含ali标签。

$('li a[rel=close]').live('click', function(e){
    e.stopPropagation();
    e.preventDefault();
})

但这并不能阻止事件发生。有什么建议吗?

事件是否被触发了?你能分享一下你的HTML代码吗? - Soufiane Hassou
可能是重复的问题:子操作未触发父级jQuery - AXMIM
3个回答

3

stopPropagation 在使用 live 方法时存在问题,来自 jQuery 的 stopPropagation 文档 -

由于 .live() 方法处理事件时,它们已经传播到文档的顶部,因此无法停止传播 live 事件。

正如 Rob W 所说,你的代码在使用 bind 时会很好地工作,这里是一个演示 - http://jsfiddle.net/TmKyT/


stopPropagation 可以阻止冒泡触发祖先的 live 事件,但它会触发在冒泡中使用 bind 绑定的其他监听器。http://jsfiddle.net/yEnzC/ - David Hellsing

1
使用.bind代替.livelive事件在传播树的末端触发。只有当您想要为稍后创建的元素绑定事件侦听器时,live才比bind更有用。

0
也许尝试使用委托?
$('ul.parent').delegate('li a[rel=close]', 'click', function( event ) {

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接