이 글에서는 JS 버블링 이벤트와 이벤트 캡처를 예시로 분석합니다. 참고하실 수 있도록 공유해 주세요. 자세한 내용은
사례
<!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>
요약
1 을 클릭합니다. 순서는 Div-Body-Html-Document-Window
2. 다른 빈 곳을 클릭하세요. 순서는 Html-Document-Window
3. 연속으로 두 번 클릭하면 두 번 연속으로 실행됩니다
4. 버블링의 전제는 해당 이벤트도 정의한다는 것입니다
더 복잡한 예를 보세요
<!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>
요약
1. >
창 - true문서 - trueHtml - true본문 - trueDiv - trueDiv - false Div - 클릭본문 - false본문 - 클릭Html - falseHtml - 클릭문서 - false문서 - 클릭창 - 거짓창 - 클릭2. js 코드3. 클릭 이벤트가 정의되지 않은 경우에도 클릭 이벤트를 캡처할 수 있으며 다시 변환하여 방지할 수 있습니다. 버블링
<!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>