在事件处理程序中调用event.stopImmediatePropagation()
和return false
有什么区别吗?
发布于 2015-07-01 14:14:33
以下是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>
(也可在JSFiddle上使用。)
manwal’s answer中的表不完全正确。
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 **Yes**
发布于 2011-03-15 02:46:22
是。event.stopImmediatePropagation()不允许调用该事件的任何其他处理程序,无论它们被绑定到哪里。Return false仅阻止绑定到其他元素(即与处理stopImmediatePropagation()调用的事件处理程序不同的元素)的处理程序接收事件。
https://stackoverflow.com/questions/5302903
复制相似问题