In diesem Artikel werden JS-Bubbling-Ereignisse und die Ereigniserfassung anhand von Beispielen analysiert. Teilen Sie es allen als Referenz mit. Die Einzelheiten lauten wie folgt:
Fall
<!DOCTYPE html> <html> <head> <title>冒泡事件</title> <script type="text/javascript"> window.onload = function(){ window.onclick = function(){ alert("Window"); // 顶级 }; document.onclick = function(){ alert("Document"); // 次顶级 }; document.documentElement.onclick = function(){ alert("Html"); // 次次顶级 }; document.body.onclick = function(){ alert("Body"); // 次次次顶级 }; document.getElementById("myDiv").onclick = function(){ alert("Div"); // 最先执行,并且会传递到上一层。点击两次,则按顺序执行两次。如果上级也有点击事件的话 }; } </script> </head> <body> <div id="myDiv">点我</div> </body> </html>
Zusammenfassung
1 . Klicken Sie auf myDiv. Die Reihenfolge lautet Div-Body-Html-Document-Window
2. Klicken Sie auf andere leere Stellen. Die Reihenfolge lautet Html-Document-Window
3. Klicken Sie zweimal hintereinander und es wird zweimal nacheinander ausgeführt
4. Die Voraussetzung für das Sprudeln ist, dass das übergeordnete Ereignis auch das entsprechende Ereignis definiert
Sehen Sie sich ein komplexeres Beispiel an
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>事件捕捉</title> <script type="text/javascript"> window.onload = function(){ window.addEventListener("click", function(){ alert("Window - true"); }, true); // true - 事件句柄在捕获阶段执行 ,false- false- 默认。事件句柄在冒泡阶段执行 document.addEventListener("click", function(){ alert("Document - true"); }, true); document.documentElement.addEventListener("click", function(){ alert("Html - true"); }, true); document.body.addEventListener("click", function(){ alert("Body - true"); }, true); document.getElementById("myDiv").addEventListener("click", function(){ alert("Div - true"); }, true); window.addEventListener("click", function(){ alert("Window - false"); }, false); // true - 事件句柄在捕获阶段执行 ,false- false- 默认。事件句柄在冒泡阶段执行 document.addEventListener("click", function(){ alert("Document - false"); }, false); document.documentElement.addEventListener("click", function(){ alert("Html - false"); }, false); document.body.addEventListener("click", function(){ alert("Body - false"); }, false); document.getElementById("myDiv").addEventListener("click", function(){ alert("Div - false"); }, false); window.onclick = function(){ alert("Window - click"); // 顶级 }; document.onclick = function(){ alert("Document - click"); // 次顶级 }; document.documentElement.onclick = function(){ alert("Html - click"); // 次次顶级 }; document.body.onclick = function(){ alert("Body - click"); // 次次次顶级 }; document.getElementById("myDiv").onclick = function(){ alert("Div - click"); // 最先执行,并且会传递到上一层。点击两次,则按顺序执行两次。如果上级也有点击事件的话 }; } </script> </head> <body> <div id="myDiv">点我</div> </body> </html>
Zusammenfassung
1. Das Ausführungsergebnis des Klicks ist
Fenster – wahr
Dokument – wahr
Html – wahr
Körper – wahr
Div – wahr
Div - false
Div - klicken
Body - false
Body - klicken
Html - false
Html - klicken
Dokument - falsch
Dokument - klicken
Fenster - falsch
Fenster - klicken
2. Die Bestellung hat nichts mit der Bestellung zu tun des js-Codes
3. Auch wenn das Klickereignis nicht definiert ist, kann es dennoch erfasst werden, solange darauf geklickt wird
und erneut umgewandelt werden, um es zu verhindern sprudelnd
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>事件捕捉</title> <script type="text/javascript"> window.onload = function(){ document.addEventListener("click", function(){ alert("Document - true"); }, true); window.addEventListener("click", function(){ alert("Window - true"); }, true); // true - 事件句柄在捕获阶段执行 ,false- false- 默认。事件句柄在冒泡阶段执行 document.documentElement.addEventListener("click", function(){ alert("Html - true"); }, true); document.body.addEventListener("click", function(){ alert("Body - true"); }, true); document.getElementById("myDiv").addEventListener("click", function(){ alert("Div - true"); }, true); window.addEventListener("click", function(){ alert("Window - false"); }, false); // true - 事件句柄在捕获阶段执行 ,false- false- 默认。事件句柄在冒泡阶段执行 document.addEventListener("click", function(){ alert("Document - false"); }, false); document.documentElement.addEventListener("click", function(){ alert("Html - false"); }, false); document.body.addEventListener("click", function(){ alert("Body - false"); }, false); document.getElementById("myDiv").addEventListener("click", function(){ alert("Div - false"); }, false); window.onclick = function(){ alert("Window - click"); // 顶级 }; document.onclick = function(){ alert("Document - click"); // 次顶级 }; document.documentElement.onclick = function(){ alert("Html - click"); // 次次顶级 }; document.body.onclick = function(){ alert("Body - click"); // 次次次顶级 }; document.getElementById("myDiv").onclick = function(){ alert("Div - click"); // 最先执行,并且会传递到上一层。点击两次,则按顺序执行两次。如果上级也有点击事件的话 event.stopPropagation(); // 阻止冒泡 }; } </script> </head> <body> <div id="myDiv">点我</div> </body> </html>
Zusammenfassung
Fenster – wahr
Dokument – wahr
Html – wahr
Body – true
Div – true
Div – false
Div – click
beendet, es erfolgt keine Nachverfolgung Inhalt