事件冒泡以及事件委托

菜鸟一枚,本文是从其他地方学习和自己理解出来的,为了记录自己的学习,不对的地方欢迎在下方评论区指正。


一、定义

他们是描述事件触发时序问题的术语。

事件冒泡:就是元素自身的事件被触发后,如果父元素有相同的事件,如click事件,那么元素本身的触发状态就会传递,也就是冒到父元素,父元素的相同事件也会一级一级根据嵌套关系向外触发,直到document/window,冒泡过程结束。

事件委托:利用事件冒泡,只指定一个事件处理程序来管理某一类型的所有事件。


二、方法

JQuery 提供了两种方式来阻止事件冒泡。

方式一:event.stopPropagation();

 $("#div1").mousedown(function(event){
      event.stopPropagation();
  });

方式二:return false;  

  $("#div1").mousedown(function(event){
     return false;
   });

但是这两种方式是有区别的。return false 不仅阻止了事件往上冒泡,而且阻止了事件本身。event.stopPropagation() 则只阻止事件往上冒泡,不阻止事件本身。


jQuery事件委托比较丰富,可用live(),delegate(),bind(),on()等方法。jQuery从1.7之后就不推荐live()和delegate()方法了。bind()方法同原生的JavaScript实现方法一样,当父元素代子元素执行事件时,父元素也会触发事件,所以我们需要判断一下触发事件的元素名。此外,用bind()方法给元素绑定事件的时候要注意,它只能给已经存在DOM元素添加事件,不能动态绑定事件。

所以大家还是使用on()方法吧。

$(function(){            
 $("#lists").on("click","li",function(event)
{
   var target = $(event.target);
   target.css("background-color","red");
  })
})


事件委托事件冒泡结合在面试中可能会被问到。事件委托是一种常用的绑定事件的技巧,它的原理是利用事件冒泡事件冒泡是指当一个元素上的事件被触发时,它会逐级向上冒泡到它的父元素,直至冒泡到文档的根节点。这种机制可以让我们利用事件委托来处理大量的DOM元素上的事件。 举个例子来说明事件委托的原理,假设我们有一个最外层的div,里面包含了多个ul元素,而每个ul元素里面又包含了多个li元素和a元素。如果我们给最外层的div添加点击事件,那么当我们点击任意一个li元素或a元素时,事件会冒泡到最外层的div上,从而触发最外层div的点击事件。这样,我们就可以利用最外层div的点击事件来处理所有li元素和a元素的点击事件,而不需要给每个li元素和a元素分别绑定点击事件。 所以,事件委托的好处是可以减少事件处理程序的数量,提高代码的性能。通过将事件绑定在父元素上,可以节省内存,减少事件监听的绑定次数,同时也可以动态地添加或删除子元素,而不需要重新绑定事件。 总结一下,事件委托是一种利用事件冒泡原理的技巧,通过将事件绑定在父元素上,可以处理大量子元素上的事件,避免给每个子元素分别绑定事件处理程序。这样可以提高代码的性能,并且方便动态添加或删除子元素。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [什么是事件冒泡事件委托?如何实现事件委托?](https://blog.csdn.net/qq_38290251/article/details/88026540)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [面试题:什么是事件委托? 怎么阻止默认动作? 怎么阻止事件冒泡?](https://blog.csdn.net/baidulixueqin/article/details/117098286)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值