在事件處理程序中調用event.stopImmediatePropagation()
和return false
之間是否有區別?jquery:event.stopImmediatePropagation()vs 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的擴展(更新:顯然它是DOM Level 3 Events specification的一部分)。
注:return false
不防止事件在冒泡「正常」(非jQuery的)事件處理(見this answer)(但仍阻止默認動作)。
也許值得一讀:
是。 event.stopImmediatePropagation()不會讓任何其他處理程序被調用,無論它們在哪裏綁定。返回false僅阻止綁定到其他元素的處理程序(即,與處理stopImmediatePropagation()調用的事件處理程序不同的元素)接收事件。
返回false
將停止事件冒泡,但其他界事件將觸發。但stopImmediatePropagation
可防止其他綁定事件觸發並停止冒泡。
代碼本上jsfiddle實施例。
@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
這裏是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**
- 1. startAccessingSecurityScopedResource()return always false
- 2. AS3:ExternalInterface.addCallback return false
- 3. !function(){return false; }()
- 4. page.Isvalid always return false?
- 5. proc return vs lambda return
- 6. Python Return True或False
- 7. jquery live return false issue
- 8. RETURN QUERY VS RETURN QUERY EXECUTE
- 9. Node.js res.send VS res.end VS return res.end
- 10. Objective C:-1 <0 return false
- 11. javascript「return false」不起作用
- 12. AJAX POST $ _FILES with onclick =「return false;」
- 13. Django templatetag return True或False
- 14. jquery .submit return false not always working
- 15. return false/web development javascript/jquery
- 16. Apple Watch WCSession return watchAppInstalled false
- 17. activeSelf return true and gameobject is false
- 18. onsubmit(return test();)不返回false;
- 19. XML false vs(string)false
- 20. if..else vs if(){return}
- 21. HiddenInput(DisplayValue = false)] vs [ScaffoldColumn(false)]
- 22. False or None vs. None或False
- 23. AutoEventWireup True Vs False
- 24. ValidateInput(false)vs AllowHtml
- 25. 「if(systemReady == false)return」的區別是什麼?和「if(!systemReady)return」在CPU
- 26. PHP return(value); vs返回值;
- 27. 使用函數:print vs return
- 28. Return語句VS GUARD LET
- 29. If(ModelState.IsValid == false)return View();或查看(模型);?
- 30. 函數在「return(False)」後不停止
+1,我可以說stopPropagation意味着停止冒泡 - 是的,防止默認 - 不,防止相同的元素處理器 - 沒有 – Arjun 2011-03-14 19:06:32
@Arjun:是的....讓我補充這一點。 – 2011-03-14 19:10:56
+1用於提供此優秀對比表 – 2014-04-16 07:22:27