參考博客: https://www.cnblogs.com/plane-hjh/p/7880131.html
https://www.cnblogs.com/leftJS/p/10948138.html
http://caibaojian.com/javascript-stoppropagation-preventdefault.html
阻止事件冒泡http://caibaojian.com/javascript-stoppropagation-preventdefault.html
在正常的開發過程中,如果想要阻止事件的傳播,通過一個方法實現。
在微軟的模型中,你必須設置事件的cancelBubble的屬性為true
window.event.cancelBubble = true |
在w3c模型中你必須調用事件的stopPropagation()方法
e.stopPropagation()//阻止事件冒泡 event. stopImmediatePropagation()//可以阻止掉同一事件的其他優先級較低的偵聽器的處理(這貨表示沒用過,優先級就不說明了,谷歌或者問度娘吧。) |
通過調用這些方法會阻止所有冒泡向外傳播。跨瀏覽器解決方案:
function doSomething(e) { if (!e) { var e = window.event; e.cancelBubble = true; } if (e.stopPropagation) { e.stopPropagation(); } } |
2 阻止事件的默認行為,例如click <a>后的跳轉~
• 在IE下設置window.event.returnValue = false;
• 在W3c中,使用preventDefault()方法; //阻止元素默認的行為,如鏈接的跳轉、表單的提交;
event.target與event.currentTarget他們有什么不同?
target在事件流的目標階段;currentTarget在事件流的捕獲,目標及冒泡階段。只有當事件流處在目標階段的時候,兩個的指向才是一樣的, 而當處於捕獲和冒泡階段的時候,target指向被單擊的對象而currentTarget指向當前事件活動的對象(一般為父級)。
javascript的return false只會阻止默認行為,而是用 jQuery的話則既阻止默認行為又防止對象冒泡。