【发布时间】:2014-09-28 19:49:17
【问题描述】:
假设,我们有几个动态添加 <div /> 在一个页面上,我们需要给它们每个绑定一个点击事件。
通常,我们会使用:
$(document).on( 'click', 'div', function() {
// ...
});
但我需要防止在点击这些 div 后冒泡。所以我尝试使用:
$(document).on( 'click', 'div', function( e ) {
e.stopPropagation();
// ...
});
这不起作用,因为点击没有到达文档元素。我想念 live() 函数,因为它可以将事件直接绑定到新元素,而不是文档。
那么我们怎样才能使这个工作呢?提前谢谢!
更新
我发现了问题。正如 Ninsly 所写,事件确实到达了文档元素。
在我的应用中有很多 ajax,我有 2 个函数,绑定到这些 div。
第一个有我在上面发布的代码:
$(document).on( 'click', 'div', function( e ) {
e.stopPropagation();
// ...
});
第二个是在页面上已经有一个div之后绑定的,所以我使用了:
$('div').click( function( e ) {
e.stopPropagation();
// ...
});
第二个有效,第一个 - 没有。我尝试以与第一个函数相同的方式重写第二个函数 - 现在一切正常。
【问题讨论】:
-
它确实到达了文档元素 (See Fiddle)。它会在文档元素处停止传播。
-
"我想念
live()函数,因为它可以将事件直接绑定到新元素,而不是文档。"这不是真的,使用live事件委托的目标是document对象。主要是因为这个原因,它已被弃用和删除。 -
stopImmediatePropagation ???
标签: jquery