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 falsepreventDefaultstopPropagationstopImmediatePropagation

 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