javascript事件委托

126 阅读2分钟

什么是事件委托?

事件委托就是利用冒泡的原理,将事件加到 父元素 或 祖先元素上,触发执行效果。

   事件从最深的节点开始,然后逐步向上传播事件,举个例子:页面上有这么一个节点树,div>ul>li>a;
 比如给最里面的a加一个click点击事件,那么这个事件就会一层一层的往外执行,执行顺序a>li>ul>div,
 有这样一个机制,那么我们给最外面的div加点击事件,那么里面的ul,li,a做点击事件的时候,都会冒泡
 到最外层的div上,所以都会触发,这就是事件委托,委托它们父级代为执行事件。



<body>

<button id="btn" value="嘿嘿">哈哈</button>

<script>
   window.onload=function () {

      let btn=document.getElementById("btn")
          document.onclick=function (e) {
          // console.log(e.target)
        if(e.target===btn){
          alert(btn.value)
     }
  }

 }
</script>
</body>

如何阻止冒泡?

 DOM中提供stopPropagation()方法,但IE不支持,使用event对象在事件函数中调用就行.
 IE中提供的是,cancelBubble属性,默认为false,当它设置为true时,就是阻止事件冒泡,也是用event对象在事件函数中调用.
 jQuery中提供了stopPropagation()方法来阻止事件冒泡,当需要时,只需用用event对象来调用就行,即event.stopPropagation();

怎么阻止事件冒泡?

DOM中提供preventDefault()方法来取消事件默认行为,但是只有当cancelable属性设置为true的事件,才可以使用preventDefault()来取消事件默认行为,使用event对象在事件函数中调用就行。
IE中提供的是returnValue属性,默认为true,当它设置为false时,就是取消事件默认行为,也是用event对象在事件函数中调用。
jQuery中提供了preventDefault()方法来阻止元素的默认行为,只需要用event对象来调用就好,即event.preventDefault()
对于a链接,可以使用javascript伪协议来阻止默认行为