我只是读http://api.jquery.com/event.stopPropagation/关于现场活动
由于.live()方法问题处理 事件一旦他们传播到 文件的顶部,它不是 可能停止活传播 事件
我对这个声明有点困惑,有人能请一些例子解释我吗?
我只是读http://api.jquery.com/event.stopPropagation/关于现场活动
由于.live()方法问题处理 事件一旦他们传播到 文件的顶部,它不是 可能停止活传播 事件
我对这个声明有点困惑,有人能请一些例子解释我吗?
Live方法将处理程序绑定到文档,并标识哪个元素触发了event.target
属性中的事件。
所以实际的处理程序在顶层(根据层次结构)。
的stopPropagation
停止从一个上升的DOM层次结构中鼓泡,但由于该处理程序是在顶部已经(在.live
情况)没有上地方气泡..
例如尝试..
- document
- div
- link
你一个click事件处理程序绑定到链接(与bind
或click
方法)。
当你点击链接时,处理程序被触发,但是除此之外,点击事件会在DOM到达文档之前上升,并且还会触发绑定到div和文档的点击处理程序。 (除非使用.stopPropagation
)
可选地如果使用.live
方法到事件处理程序结合,它将被绑定到该文档。如果你现在点击链接,那么事件(不会立即启动,因为没有处理程序绑定到它)自然会上升到DOM(触发点击处理程序它遇到)。一旦它到达文档,它将触发我们自己的处理程序。但是没有上限,所以stopPropagation
在这一点上是无用的。
HTML:
<div id="outer">
<div id="inner">
<span>.live() version</span>
</div>
</div>
<div id="outer2">
<div id="inner2">
<span>.delegate() version</span>
</div>
</div>
JS:
$(function(){
$('#inner2').delegate('span', 'click', function(e){
e.stopPropagation(); // indeed, no alert!
});
$('span').live('click', function(e){
e.stopPropagation();
// we would expect the propagation to stop here, so no alert, right?
});
$('#outer2, #outer').click(function(){ alert("Don't reach me!"); });
});
例子:http://jsfiddle.net/knr3v/2/
.live()
不仅它的魔力,一旦该事件已经起泡,所以从传播停止事件是没用的 - 它已经太晚了,它已经到达树的顶端并且传播了...
相关问题(引擎盖下):http://stackoverflow.com/questions/1687296/what-is-dom-event-delegation – 2011-05-16 16:29:43