javascript - 如何选择事件委托的载体
大家讲道理
大家讲道理 2017-04-11 13:00:18
[JavaScript讨论组]

事件委托的时候,一般都是委托给它的父元素来处理,但是如果全委托给document来处理好像也可以实现同样的功能。那么,事件委托载体的选择有没有什么遵循的原则?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(4)
伊谢尔伦

事件委托一般来说是没有什么问题的,但是这里有坑。举个例来说

<p class="container">
  <p class="line">
  </p>
</p>
$(document).on("click", ".line", () => {
    console.log("hello, click line");
})

$(".container").on("click", e => {
  console.log("hello, click container");
    e.stopPropagation();
});

这种情况下,你会发现无论如何都不会输出 hello, click line,因为事件的肥皂泡冒到 .container 那里就破了,冒不到 document

https://jsfiddle.net/kfbpvs5a/

当然,知道这个坑之后有些问题也是可以解决的,但也会有难以解决的情况。所以一般能不用委托,就不用委托,如果需要委托,一定在最近的一层可以承载委托的父级委托。小应用为了方便,直接在 document 上委托也不是不可以,注意坑就是了。

天蓬老师

只要父元素已经存在于页面就行。不存在于页面上,一般绑定在body或者doucument上。或者也可以绑定在不存在的父元素上,但是这个父元素必须用JQ的append方式插入于页面中,这样事件才会有效。

阿神

没什么遵循的原则,你觉得怎么方便怎么来。

黄舟

一般不需遵循什么原则,但有两点需要注意:
1、注意承载委托的父级元素在绑定事件时DOM结构是否已存在。
2、注意捕获冒泡过程,事件对象方法如e.stopPropagation()的影响;
我一般都在document上绑定,这样一来第一个问题就不存在了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号