javascript - onmouseover事件会执行多次(应该和事件冒泡没关系吧)
高洛峰
高洛峰 2017-04-11 09:59:10
[JavaScript讨论组]

不愿复制粘贴的点这里

把源码也贴出来吧

 

把鼠标放在p#container(除p#child以外的区域)上正常触发onmouseover事件,但是这里再把鼠标移到p#child上就又会触发一次
onmouseover事件(想想确实是这样哈),两次事件同时执行,顿时就亮瞎眼了。平时都用jquery,还真没发现这种问题,果然站在巨人的肩膀上就是好啊。

上面这个问题算了解决了,再问一个关于事件冒泡的新问题

这个例子中,我addEventListener()的第三个参数都设为true,也就是都在捕获阶段绑定事件处理函数,这应该不同于冒泡阶段绑定事件处理函数吧。所以按道理点击p#child的时候应该是先触发p#container的点击事件,再触发p#child的点击事件吧?然而现实却是相关的,




    
    Document


      


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
黄舟

谢邀。你可以把mouseover和mouseout都写上,可以看到,会在移动到child上出现多次触发。这个不管是原生还是jquery都会出现问题。jquery提供了mouseenter和mouseleave这个不会出现上述问题

巴扎黑

正是因为mouseover事件是冒泡的,它的定义是在鼠标在一个元素上方进入到另一个元素内就会触发,这里另一个元素有可能是内部元素也可以是外部元素,所有在进入一个元素内部的元素时也会触发。
可以使用mouseenter代替,mouseenter不冒泡,只在鼠标元素首次移入元素内触发,移动到这个元素的后代元素上不会重复触发。

更新:
addEventListener用法:
addEventListener(name,function,boolean);
ture是第三个参数,写在function里面算怎么回事?
建议题主好好看看api,再写代码,不然总会遇到这种问题。

巴扎黑

该情况就是mouseover事件是冒泡的导致。mouseover

The mouseover event is fired when a pointing device is moved onto the element that has the listener attached or onto one of its children.

你将事件绑定给了父级,它会帮你把 子元素一起监听。
jquery 的 mouseover也有相同情况。

mouseenter 和 mouseover 的区别

我英语拙计,demo好懂。题主自行查看。

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

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