day-14.3 事件冒泡
事件冒泡:子元素联动父元素执行鼠标事件的事件函数就叫冒泡事件;
1 #wrap { 2 width: 200px; 3 height: 200px; 4 background-color: pink; 5 } 6 .box { 7 width: 100px; 8 height: 100px; 9 background-color: black; 10 } 11 12 </style> 13 </head> 14 <body> 15 <div id="wrap"> 16 <div class="box"> 17 18 </div> 19 </div> 20 21 <script> //点击一个的box的时候,输出3个(box.wrap.document),点击wrap,输出2个(wrap.document),点击文档,只输出document. 22 var oWrap = document.getElementById("wrap"); 23 oWrap.onclick = function () { 24 console.log("wrap"); 25 }; 26 oWrap.children[0].onclick = function () { 27 console.log("box"); 28 }; 29 document.onclick = function () { 30 console.log("document") 31 }; 32 </script> 33 </body>
这个就是事件冒泡,
事件冒泡的基本原理是基于Dom的树结构,即Dom树结构的根是document,对document内的任一元素的点击事件都会联动document的点击事件,而wrap又是box的上级结构,所以对box的点击会联动到wrap和document,
冒泡是树层结构的根往子去传递,即根父级元素将事件给子级的实参,传进去,由子级最终实现全部输出,
是一个树的一层一层的传递关系,也就是说,如果想触发鼠标事件函数的时候,不传递根父级的参数的话,在子级取消冒泡传递就可以了;
1 oWrap.onclick = function () { 2 console.log("wrap"); 3 oWrap.stopPropagation(); //上述例子里面加一个这个阻止冒泡的函数就可以了; 4 };
兼容IE的写法:
1 oWrap.cancelBubble = true ; //默认是false,关闭冒泡,true开启冒泡;
1 if(oWrap.stopPropagation){ 2 oWrap.stopPropagation(); 3 }else{ 4 oWrap.cancelBubble = true ; 5 }
浙公网安备 33010602011771号