所谓冒泡就是时间的向上传到,当后代元素上的时间被触发时,其祖先元素的相同事件也会被触发。
比如:
body > div > span
给三者都绑定了单击响应函数,点击span,会触发span,div,body三者的单击响应函数。
在开发中,大部分情况冒泡都是有用的。
比如:给document绑定了onmousemove的事件,倘若没有冒泡,页面中有div,鼠标滑过div时,onmousemove事件无法被触发,则onmousemove无法完成跟随鼠标移动而触发事件。
取消冒泡
若不希望发生事件冒泡,可以通过事件对象来取消冒泡。
可以将事件对象的cancelBubbble
设置为true
,即可取消冒泡
span1.onclick = function(event){ event.cancelBubble = true; };
事件的委派
在开发中,有些元素是后添加的,但同样需要绑定事件。
我们希望,只绑定一次事件,即可应用到多个元素上,即使元素是后添加的。
利用冒泡原理,可以尝试将其绑定给元素的共有祖先元素,通过祖先元素的响应函数来处理事件。
比如:
想要给li绑定事件,有些li是通过js后添加的,这时候可以将事件绑定给ul。
但这种方法有个问题,整个ul部分都可以触发这个事件。
处理方法:判断触发事件的对象是否是我们期望的元素,是则执行
需要用到event.target.元素
if (event.target.className=="link"){ //执行响应函数 }