jQuery中mouseleave和mouseout的区别详解

很多人在使用jQuery实现鼠标悬停效果时,一般都会用到mouseover和mouseout这对事件。而在实现过程中,可能会出现一些不理想的状况。

先看下使用mouseout的效果:

<p>先看下使用mouseout的效果:</p>
<div >
<div >使用了mouseout事件↓</div>
<div >
<div>第一行</div>
<div>第二行</div>
<div>第三行</div>
</div>
</div>
<p><script type='text/javascript'> 
jQuery(document).ready(function($) { 
     $("#title").mouseover(function() { 
         var offset = $(this).offset(); 
         $("#list").css({left: offset.left, top: offset.top+19}).show(); 
     }); 
     $("#container").mouseout(function() { 
         $("#list").hide(); 
     }); 
 }); 
</script>

  

第一行第二行第三行我们发现使用mouseout事件时,鼠标只要在下拉容器#list里一移动,就触发了hide(),其实是因为mouseout事件是会冒泡的,也就是事件可能被同时绑定到了该容器的子元素上,所以鼠标移出每个子元素时也都会触发我们的hide()。

从jQuery 1.3开始新增了2个mouse事件,mouseenter和mouseleave。与mouseout事件不同,只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。

我们来看一下mouseleave事件的效果:

<div >
<div >使用了mouseleave事件↓</div>
<div >
<div>第一行</div>
<div>第二行</div>
<div>第三行</div>
</div>
</div>
<script type='text/javascript'> 
jQuery(document).ready(function($) { 
     $("#title2").mouseover(function() { 
         var offset = $(this).offset(); 
         $("#list2").css({left: offset.left, top: offset.top+19}).show(); 
     }); 
     // 绑定mouseleave事件,效果很好 
     $("#container2").mouseleave(function() { 
         $("#list2").hide(); 
     }); 
 }); 
</script>
<p>

  

第一行第二行第三行mouseleave和mouseout事件各有用途,因为事件冒泡在某些时候是非常有用的

解决div mouseout事件冒泡的问题

解决的办法是,使用jquery的bind方法

 如:现在有一个div对象需要监听他的鼠标事件

<div class="dpx2"><div class="dpx2_px" style="cursor:pointer;" >请选择排序方式↓</div>
            <div class="dpx2_px_xl"  >
                <div><a class="sortA">按时间升序↑</a></div>
                <div><a class="sortA">按时间降序↓</a></div>
                <div><a class="sortA">按评论数量升序↑</a></div>
                <div><a class="sortA">按评论数量降序↓</a></div>
                <div><a class="sortA">按点击数升序↑</a></div>
                <div><a class="sortA">按点击数降序↓</a></div>
            </div>
        </div>

当鼠标移动到ID为searchSort的Div上时,显示下面的div。当鼠标移出下面的div时,隐藏div

JS为:

 $(function(){
                 var sortList = $("#sortList");
            $("#searchSort").mouseover(function() {
                 var offset = $(this).offset();
                sortList.css("left", offset.left);
                sortList.css("top", offset.top+20);
                sortList.show();
            });
//关键的一句,绑定Div对象的mouseleave事件
            sortList.bind("mouseleave", function() {
                $(this).hide();
            });
        });

本文来源:http://www.php100.com/html/program/jquery/2013/0905/5891.html