javascript事件传播
addEventListener
第三的参数,默认为false;
如何设置false,则是冒泡(起泡)阶段中触发相应注册函数
如何设置true,则是捕获阶段中触发相应注册函数(个人理解)
在 2 级 DOM 中,事件传播分为三个阶段:
第一,捕获阶段。事件从 Document 对象沿着文档树向下传递给目标节点。如果目标的任何一个先辈专门注册了捕获事件句柄,那么在事件传播过程中运行这些句柄。
第二个阶段发生在目标节点自身。直接注册砸目标上的适合的事件句柄将运行。这与 0 级事件模型提供的事件处理方法相似。
第三,起泡阶段。在此阶段,事件将从目标元素向上传播回或起泡回 Document 对象的文档层次。
event.stopPropagation(),该方法将停止事件的传播,阻止它被分派到其他 Document 节点。在事件传播的任何阶段都可以调用它。
(个人理解:捕获和冒泡都没有了)
<html> <head> <script type="text/javascript" src="tmp.js"></script> <style type="text/css"> #d1{ width:300; height:300; background-color:black; margin:0px auto; } #d2{ width:200; height:200; background-color:green; margin:0px auto; } #d3{ width:100; height:100; background-color:red; margin:0px auto; } </style> </head> <body> <div id="d1"> <div id="d2"> <div id="d3"></div> </div> </div> <p id="p1"></p> </body> </html>
tmp.js
window.onload=enableBubble; var pcontext=""; function enableBubble(){ document.getElementById("d1").addEventListener("click",logSomeThing); document.getElementById("d2").addEventListener("click",logSomeThing); document.getElementById("d3").addEventListener("click",logSomeThing); pcontext=document.getElementById("p1"); } function logSomeThing(e){ //e.stopPropagation(); pcontext.innerHTML=pcontext.innerHTML+"<br/>"+e.currentTarget.id+"---"+e.target.id; }
浙公网安备 33010602011771号