在事件處理程序中,每個事件處理程序中間都會有一個event對象,而這個event對象有兩個方法,一個是stopPropagation方法,一個是stopImmediatePropagation方法,兩個方法只差一個Immediate,這里就說說這兩個方法的區別
1、stopImmediatePropagation方法:
stopImmediatePropagation方法作用在當前節點以及事件鏈上的所有后續節點上,目的是在執行完當前事件處理程序之后,停止當前節點以及所有后續節點的事件處理程序的運行
2、stopPropagation方法
stopPropagation方法作用在后續節點上,目的在執行完綁定到當前元素上的所有事件處理程序之后,停止執行所有后續節點的事件處理程序
區別:
從概念上講,在調用完stopPropagation函數之后,就會立即停止對后續節點的訪問,但是會執行完綁定到當前節點上的所有事件處理程序;而調用stopImmediatePropagation函數之后,除了所有后續節點,綁定到當前元素上的、當前事件處理程序之后的事件處理程序就不會再執行了
舉個例子:
//html代碼
<div id = "div1"> <button id = "button1"></button> </div>
//js代碼
var div = document.getElementById("div1"); var btn = document.getElementById("button1"); div.addEventListener("click" , function(){alert("第一次執行");} , true); //1 div.addEventListener("click" , function(){alert("第二次執行");} , true); //2 btn.addEventListener("click" , function(){alert("button 執行");}); //3
在這里,給 1 函數alert后加上stopImmediatePropagation, 那么之后彈出窗口“第一次執行”
但是如果給 1 函數alert后加上stopPropagation , 那么之后會彈出窗口“第一次執行”,“第二次執行”兩個窗口