事件委托

1.什么是事件委托呢?

JS里的事件委托就是当事件触发时,把要做的事委托给父元素(上级、上上级…)来处理。当需要添加的事件过多时,可以使用事件委托,而事件委托实际上利用了事件冒泡的特性。

2.什么是事件冒泡?

简单的来说,当我们点击子元素,触发的时事件会传递给父元素,这就是事件冒泡。

3.为什么要用事件委托?好处是什么?

为什么要用事件委托呢?
因为,每个事件处理函数都是对象,对象会占用内存,内存中的对象越多,性能就越差。
此外,必须事先指定所有的事件处理程序而导致的DOM访问次数,会延迟整个页面的交互就绪时间。

好处:
因为在JavaScript中,每个函数都是对象,对象越多,占用的内存也就越多,合理使用事件委托可以减少内存的占用。所以事件委托的好处就是在内存中开辟了一块空间,节省资源同时减少了dom操作,提高性能,而且js新生成的子元素也不用新为其添加事件了,程序逻辑上比较方便

好处说了,说说问题?
兼容,一个好的项目,首先要考虑的就是兼容问题,事件委托存在兼容性问题是,在老的IE下,事件源是 window.event.srcElement,其他浏览器是 event.target,所以在做兼容的时候 参数 =
event.target || window.event 需要加上这一步。完美解决~

关于 Jquery事件委托在IOS系统会失效!?
将事件委托给了document元素,具体绑定情况如下:
$(document).on(‘click’, “.btn”, function(){})
PC端测试和安卓测试都正常,但是在IOS端缺失效了!根据H5新定义,默认可点击的元素有a标签和button标签,也就是给这两种标签进行事件委托是完全没有问题的。

解决办法:
给.btn加一个样式: cursor: pointer;
按照规定, 点击元素使用button或者a标签
把document换成.btn的父元素,前提是父元素不是跟随.btn一起动态添加进来的
然后给一个比较简单的问题,父级那么多子元素,怎么区分事件本应该是哪个子元素的?
区分方法就是event对象里记录的有“事件源”,它就是发生事件的子元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老老老老李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值