Javascript JQuery.live()工作不正常
我知道Javascript JQuery.live()工作不正常,javascript,jquery,Javascript,Jquery,我知道live在1.7版中被弃用,在1.9版中被删除,不再推荐使用。但是,由于我正在准备面试机器测试,因此我试图了解直播和上的之间的区别。说 在事件处理程序中调用event.stopperPagation()对于停止连接在事件处理程序下部的事件处理程序无效 文件;事件已传播到文档 所以我试过这个。 标记: 我使用的是Jquery版本1.7,其中live和on都存在 发生了什么: span的live没有被调用,而是直接调用单击a的 如果我删除了除live之外的所有其他事件,则会调用它 正如doc所
live
在1.7版中被弃用,在1.9版中被删除,不再推荐使用。但是,由于我正在准备面试机器测试,因此我试图了解直播
和上的之间的区别。说
在事件处理程序中调用event.stopperPagation()对于停止连接在事件处理程序下部的事件处理程序无效
文件;事件已传播到文档
所以我试过这个。
标记:
我使用的是Jquery版本1.7,其中live
和on
都存在
发生了什么:
span的live
没有被调用,而是直接调用单击a的
如果我删除了除live
之外的所有其他事件,则会调用它
正如doc所说,它的作用正好相反,即如果我使用event.stopPropagation(),它将停止事件冒泡代码>
由live
附加的事件处理程序始终附加到文档
。如果在live
的回调中调用event.stopPropagation
,则此事件已经冒泡到文档中,因此它对直接连接的事件处理程序没有影响
当事件到达h1
元素时,将调用您的event.stopPropagation()
,因此它永远不会到达文档中附加了live
事件处理程序的位置
通过启用,
可以创建jQuery支持的所有类型的事件处理。如果您查看jQuery的源代码,可以看到在1.7中,live
函数只映射到on:
live: function( types, data, fn ) {
jQuery( this.context ).on( types, this.selector, data, fn );
return this;
}
删除live
的原因是为了使api更清晰、更符合逻辑,以确定事件发生的时间和捕获的位置
编辑
您的DOM和事件处理程序连接到的位置:
document $('span').live("click") **not called** (equal to: $(document).on('click', 'span') )
|
div $('div').click() **not called**
|
h1 $('h1').click() + event.stopPropagation() **the propagation (bubbling) is stopped here not reaching the document**
|
a $('a').click()
|
span **event happens here and bubbles up**
在事件处理程序中调用event.stopPropagation()在停止文档中较低位置附加的事件处理程序时无效代码>JSFIDLE中的行为是正确的。它可以阻止事件在文档中冒泡,但是在阻止附加到子dom的事件时效率很低,这就是为什么h1和a上的事件需要回复的原因,但是第一点呢?为什么spanlive
没有被呼叫?@Imad抱歉,关于3的应该被删除。这与这三个方面有关。live
回调始终是为给定事件调用的最后一个回调,因为它们附加到文档中,该文档是冒泡阶段的最后一个元素。先生,但我找不到这一点的答案,可能是我误解了完整的概念。@Imad我在答案中添加了一个编辑,将我所写的可视化。谢谢,现在我明白了。
live: function( types, data, fn ) {
jQuery( this.context ).on( types, this.selector, data, fn );
return this;
}
document $('span').live("click") **not called** (equal to: $(document).on('click', 'span') )
|
div $('div').click() **not called**
|
h1 $('h1').click() + event.stopPropagation() **the propagation (bubbling) is stopped here not reaching the document**
|
a $('a').click()
|
span **event happens here and bubbles up**