使用jQuery mouseleave时遇到麻烦

时间:2009-08-04 23:22:27

标签: jquery mouseleave

我正在尝试使用此结构创建菜单:

<ul id="primary" class="menuOptions">
     <li>Item 1</li>
     <li>Item 2
         <div id="secondary">
            <ul class="menuOptions">
               <li>subItemOne</li>
               <li>subItemTwo</li>
           </ul>
         </div>
     </li>
     <li>Item 3</li>
</ul>

我用这个脚本制作动画:

$j('.menuOptions li').each(function(i){
//applies to all menu options
    $j(this)
   .bind('mouseover',function() {
          $j(this).toggleClass("over");
       })
       .bind('mouseleave',function() {
          $j(this).toggleClass("over");
       });                  
  });

我发现当鼠标移过辅助菜单项时,在主菜单项上调用了toggleClass函数。我知道在老鼠离开孩子之前不应该调用mouseleave,所以我很困惑。

我是否需要以某种方式主动停止事件传播?

谢谢!

2 个答案:

答案 0 :(得分:4)

您可以尝试使用悬停功能。

$j('ul.menuOptions li').hover(function(){
          $j(this).toggleClass("over");
       } ,
       function() {
          $j(this).toggleClass("over");
       }
);

答案 1 :(得分:3)

我怀疑问题是您将鼠标鼠标鼠标 连接鼠标

请参阅http://api.jquery.com/category/events/mouse-events/

一般来说,你想要的联结是:

  • 鼠标输入 鼠标离开
  • 使用鼠标
  • 鼠标

使用其他组合可能会导致意外行为。 鼠标 over 鼠标 out 是较旧的事件,虽然偶尔会有用,但通常不如鼠标输入 鼠标保留

你也可以尝试使用简单的东西 悬停 ,完全等同于使用鼠标输入 鼠标离开