jquery:event.stopImmediatePropagation()vs返回false
调用event.stopImmediatePropagation()
并在事件处理程序中return false
是否有区别?
是的,他们是不同的。
return false
与调用event.stopPropagation()
和event.preventDefault()
两者基本相同。
而event.stopImmediatePropagation()
与event.stopPropagation()
相同,同时阻止执行相同元素上的其他注册事件处理程序。 因此,它不会阻止某个事件的默认操作,例如点击链接。
简而言之:
stop | prevent | prevent "same element" bubbling | default action | event handlers return false Yes Yes No preventDefault No Yes No stopPropagation Yes No No stopImmediatePropagation Yes No Yes
return false
也适用于“正常的”JavaScript事件处理程序
event.stopPropagation()
和event.preventDefault()
也可以在“普通的”JavaScript事件处理程序中工作(在W3C兼容的浏览器中),而event.stopImmediatePropagation()
是jQuery的扩展( update:显然它是DOM级别的一部分3活动规范 )。
注意: return false
不会阻止事件在“普通” (非jQuery)事件处理程序中冒泡(请参阅此答案 )(但仍阻止默认操作)。
也许值得一读:
- jQuery事件:停止(错误)使用返回False
- quirksmode.org – 事件顺序
返回false
将停止事件冒泡,但其他绑定事件将触发。 但是, stopImmediatePropagation
阻止其他绑定事件触发并停止冒泡。
代码在jsfiddle上的例子 。
这里是完整的演示return false
, preventDefault
, stopPropagation
和stopImmediatePropagation
:
var kid = document.getElementsByTagName('button')[0]; var dad = document.getElementsByTagName('div')[0]; kid.addEventListener('click', function(e) { console.log('kid here'); e.stopImmediatePropagation(); }); kid.addEventListener('click', function(e) { console.log('neighbour kid here'); }); dad.addEventListener('click', function(e) { console.log('dad here'); }); dad.addEventListener('click', function(e) { console.log('neighbour dad here'); });
<div> <button>press</button> </div>
是。 event.stopImmediatePropagation()不会让任何其他处理程序被调用,不pipe它们绑定在哪里。 返回false只会停止绑定到其他元素的处理程序(即与处理stopImmediatePropagation()调用的事件处理程序不同的元素)来接收事件。
@FelixKling答案桌子有很棒的概念:
我张贴更多解释表:
stop | prevent | prevent | bubbling | default action | event handlers | Same Element | Parent Element return false Yes Yes No No preventDefault No Yes No No stopPropagation Yes No No Yes stopImmediatePropagation Yes No Yes No
参考: https : //stackoverflow.com/a/5302939/2236219