先上一段代碼,點擊子元素時先觸發的是父元素的 click 事件javascript
<html> <head> <script type="text/javascript"> function onLoads(){ document.getElementById("div1").addEventListener("click",(e) => { alert('1'); }, true); document.getElementById("div2").addEventListener("click",(e) => { alert('2'); }, true); } </script> </head> <body onload="onLoads()"> <div id="div1" style="width:400px;height:400px;background-color:red;border:1px;float:left; z-index:1;" > <div id="div2" style="width:50px;height:50px;background-color:blue;float:left; z-index:2;" ></div> </div> </body> </html>
點擊藍色代碼時會先彈出 1,而後彈出2; 說明先父元素事件先觸發,而後是子元素事件觸發html
看了文檔後瞬間明朗了:java
參數 | 描述 |
---|---|
event | 必須。字符串,指定事件名。 注意: 不要使用 "on" 前綴。 例如,使用 "click" ,而不是使用 "onclick"。 提示: 全部 HTML DOM 事件,能夠查看咱們完整的 HTML DOM Event 對象參考手冊。 |
function | 必須。指定要事件觸發時執行的函數。 當事件對象會做爲第一個參數傳入函數。 事件對象的類型取決於特定的事件。例如, "click" 事件屬於 MouseEvent(鼠標事件) 對象。 |
useCapture | 可選。布爾值,指定事件是否在捕獲或冒泡階段執行。 可能值:
|
addEventListener 主要在第三個參數上面,dom
冒泡階段:這相似與池塘裏的漣漪,從事件中心點,向上層傳播。而事件捕獲和這個順序正好相反。函數
因此,若是想要點擊事件從 子元素->父元素 這樣的順序傳遞的話,改下參數便可spa
<script type="text/javascript"> function onLoads(){ document.getElementById("div1").addEventListener("click",(e) => { alert('1'); }, false); document.getElementById("div2").addEventListener("click",(e) => { alert('2'); }, false); } </script>
若是,點擊了子元素,不想點擊事件向上冒泡的話,能夠這樣處理code
<script type="text/javascript"> function onLoads(){ document.getElementById("div1").addEventListener("click",(e) => { alert('1'); e.cancelBubble = true; }, false); document.getElementById("div2").addEventListener("click",(e) => { alert('2'); e.cancelBubble = true; }, false); } </script>
或者htm
<script type="text/javascript"> function onLoads(){ document.getElementById("div1").addEventListener("click",(e) => { alert('1'); e.stopPropagation(); }, false); document.getElementById("div2").addEventListener("click",(e) => { alert('2'); e.stopPropagation(); }, false); } </script>