为了账号安全,请及时绑定邮箱和手机立即绑定

关于冒泡问题

之前章节里提到的冒泡事件是:子元素如果绑定了某一事件(比如说mouseover),如果子元素出触发了mouseover事件,它会一直往上找父元素上的mouseover事件,如果父元素有mouseover事件,那么父元素的mouseover也会被触发。也就是说父元素和子元素都绑定了相同事件才会出现冒泡现象。

但是这里的li元素并没有绑定任何事件,怎么往上冒泡呢?换句话说,绑定的是ul元素,为什么起作用的是li元素?



正在回答

3 回答

我觉得,本教程的“绑定”这个词用的不好,事件这个东西应该是称之为“监听”更为恰当。

当单击一个元素、或滑入滑出元素时,都会由该元素触发事件,然后一层一层向上冒泡,如果一直到body都没有遇到某元素去监听这个事件,那就没有任何反应,如果该元素有监听该单击事件,那就会知道这个事件,如果该元素的父代或祖代有添加监听事件,也会知道这个事件。


打个比喻,ABCDEF站成一排,A倒了一桶巧克力,从A流向F,

A用手沾了舔了舔,知道是甜的,A倒的

D用手沾了舔了舔,也知道是甜的,A倒的

这就是A和D监听了“倒一桶巧克力”这个事件

如果没有任何人舔,那这桶巧克力一样从A流向F


1 回复 有任何疑惑可以回复我~

冒泡的本质是继承,为什么很多人都是从下往上的去理解呢? 因为是继承,所以ul绑定事件后,该事件也被绑定在了它的子孙元素上,所以你点击任何一个它的子孙元素都会触发事件。如果这个子孙元素本身也绑定了一个一样的事件,那么就会触发两次该事件。

假设一下,a-b-c a是祖先 c是子孙 ;将a,b,c同时绑定click,那么根据继承的原理,a只绑定了一个click事件,b两个,c三个;同理,如果只有a绑定事件,b,c也只绑定了一次事件。

2 回复 有任何疑惑可以回复我~

不存在绑定的说法,jquery只是处理触发的事件,事件本身就有,如果不捕获处理,事件会一直冒泡

这里只是在ul处理捕获的事件,任何文档对象如ul,li都可以触发事件,只是在于是否捕获处理

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于冒泡问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信