jquery中mouseover和mouseout以及mouseenter和mouseleave的区别
2016-04-15 18:34
447 查看
最近在开发菜单的时候遇到了js问题。项目要求,用户通过鼠标放上就展开菜单,移开就关闭菜单,起初,我采用mouseover、mouseout事件实施,在ie高版本例如ie11以及火狐等浏览器下都能正常的展示菜单,但是在ie8上,发现了抖动的情况,放上去的菜单一会儿产展开一会儿又关闭,不停闪烁。
经过仔细检查,发现菜单的子元素img标签虽然在菜单元素li里,但是当鼠标放在img图片上时却触发了mouseout事件,移开img则又一次触发mouseover事件。
代码示例大概如下
<li class="optn"><a>综合查询</a><img src="icon.png"/></li>
jquery:
$("optn").live("mouseover",function(){......}) .live("mouseout",function(){....})// 采用live是因为菜单dom对象动态创建在页面上的,不是直接编写在页面里
通过以上的代码发现,当触发mouseover时,在其<li>标签内部的<a>和<img>都会再次触发鼠标的mouseover和mouseout事件
强大的百度后,发现可以改成采用mouseenter和mouseleave事件,于是仔细阅读了一下这几个事件的区别才恍然大悟!我只想说,有的时候还是要仔细的阅读api文档
w3c注释:“mouseover 与 mouseenter 事件不同,不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件,而mouseenter只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件。mouseout和mouseleave也是一样,因此在有子元素的情况下应该采用mouseenter和mouseleave比较合适。”
工作完成,收工!
经过仔细检查,发现菜单的子元素img标签虽然在菜单元素li里,但是当鼠标放在img图片上时却触发了mouseout事件,移开img则又一次触发mouseover事件。
代码示例大概如下
<li class="optn"><a>综合查询</a><img src="icon.png"/></li>
jquery:
$("optn").live("mouseover",function(){......}) .live("mouseout",function(){....})// 采用live是因为菜单dom对象动态创建在页面上的,不是直接编写在页面里
通过以上的代码发现,当触发mouseover时,在其<li>标签内部的<a>和<img>都会再次触发鼠标的mouseover和mouseout事件
强大的百度后,发现可以改成采用mouseenter和mouseleave事件,于是仔细阅读了一下这几个事件的区别才恍然大悟!我只想说,有的时候还是要仔细的阅读api文档
w3c注释:“mouseover 与 mouseenter 事件不同,不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件,而mouseenter只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件。mouseout和mouseleave也是一样,因此在有子元素的情况下应该采用mouseenter和mouseleave比较合适。”
工作完成,收工!
相关文章推荐
- 浅说jQuery.Cookie.js
- jquery中的选择器:has和:not的用法
- js/jquery获取当前页面URL地址并判断URL字符串中是否包含某个具体值(获取URL的?或者#)
- JQuery+ajax+jsonp 跨域访问
- json解析,jquery解析遍历json
- Cookie实战项目1 用Cookie获取用户名信息 技术 Cookie+JQuery
- jQuery中添加自定义或函数方法
- jquery实现双击修改td内容的方法
- Ajax实战项目3 验证用户的唯一性 环境(Ajax+Jquery+Json+struts2)
- jquery对dom节点的操作【推荐】
- JQuery的选择器
- Jquery attr()方法 属性赋值和属性获取详解
- jQuery监听浏览器窗口大小的变化
- 有关jquery与DOM节点操作方法和属性记录
- js jquery 实现点击按钮后,倒计时60秒才能再次点击发送验证邮件
- Jquery购物车抛物线效果
- javaweb利用cookie记住账号(jquery.cookie.js)
- JQuery基本语法(部分)
- 快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
- jquery + ajax 局部刷新