扫码关注官方订阅号
事件委托的时候,一般都是委托给它的父元素来处理,但是如果全委托给document来处理好像也可以实现同样的功能。那么,事件委托载体的选择有没有什么遵循的原则?
光阴似箭催人老,日月如移越少年。
事件委托一般来说是没有什么问题的,但是这里有坑。举个例来说
<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。
hello, click line
.container
document
https://jsfiddle.net/kfbpvs5a/
当然,知道这个坑之后有些问题也是可以解决的,但也会有难以解决的情况。所以一般能不用委托,就不用委托,如果需要委托,一定在最近的一层可以承载委托的父级委托。小应用为了方便,直接在 document 上委托也不是不可以,注意坑就是了。
只要父元素已经存在于页面就行。不存在于页面上,一般绑定在body或者doucument上。或者也可以绑定在不存在的父元素上,但是这个父元素必须用JQ的append方式插入于页面中,这样事件才会有效。
没什么遵循的原则,你觉得怎么方便怎么来。
一般不需遵循什么原则,但有两点需要注意:1、注意承载委托的父级元素在绑定事件时DOM结构是否已存在。2、注意捕获冒泡过程,事件对象方法如e.stopPropagation()的影响;我一般都在document上绑定,这样一来第一个问题就不存在了。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
事件委托一般来说是没有什么问题的,但是这里有坑。举个例来说
这种情况下,你会发现无论如何都不会输出
hello, click line,因为事件的肥皂泡冒到.container那里就破了,冒不到document。https://jsfiddle.net/kfbpvs5a/
当然,知道这个坑之后有些问题也是可以解决的,但也会有难以解决的情况。所以一般能不用委托,就不用委托,如果需要委托,一定在最近的一层可以承载委托的父级委托。小应用为了方便,直接在
document上委托也不是不可以,注意坑就是了。只要父元素已经存在于页面就行。不存在于页面上,一般绑定在body或者doucument上。或者也可以绑定在不存在的父元素上,但是这个父元素必须用JQ的append方式插入于页面中,这样事件才会有效。
没什么遵循的原则,你觉得怎么方便怎么来。
一般不需遵循什么原则,但有两点需要注意:
1、注意承载委托的父级元素在绑定事件时DOM结构是否已存在。
2、注意捕获冒泡过程,事件对象方法如e.stopPropagation()的影响;
我一般都在document上绑定,这样一来第一个问题就不存在了。