【问题标题】:jQuery mouseenter mouseleave hover bugjQuery mouseenter mouseleave 悬停错误
【发布时间】:2014-04-15 09:26:22
【问题描述】:

我正在尝试通过切换“活动”类对我的 LI 元素应用不透明度更改,但鼠标事件或悬停都不起作用。看起来像一个简单的修复,但我不知道为什么。

jquery

$( document ).ready(function() {
  $('nav.li').mouseenter(function() {
    $(this).addClass("active");
  });

  $('nav.li').mouseleave(function() {
    $(this).removeClass("active");
  });

  $("nav.li").hover(function () {
    $(this).toggleClass("active");
  });
});

css

nav.li.active {
  opacity: .7;
}

html

<nav>
  <ul>
    <li class="about_link">...</li>
    <li class="contact_link">...</li>
    <li>...</li>
  </ul>
</nav>

谢谢

【问题讨论】:

    标签: jquery mouseover jquery-hover mouseenter


    【解决方案1】:

    JavaScript:

    从以下位置更改您的选择器:

    $('nav.li')
    

    到:

    $('nav li')
    

    目前,您的选择器定位到一个类为 li&lt;nav&gt; 元素。我认为您想定位 &lt;nav&gt; 元素内的 &lt;li&gt; 元素。

    您也可以通过将调用链接在一起来优化您的 jQuery:

    // Shorthand document ready...
    $(function () {
        $('nav li').on('mouseenter', function() {
            $(this).addClass("active");
        }).on('mouseleave', function() {
            $(this).removeClass("active");
      });
    });
    

    CSS:

    您也需要相应地修改您的 CSS:

    nav li.active {
        opacity: 0.7;
    }
    

    您可能需要考虑将其扩展为包括供应商前缀以实现最大兼容性:

    nav li.active {
        /* IE 8 - 9 */
        -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
    
        /* IE 5, 6, 7, 8, 9 */
        filter: alpha(opacity=70);
    
        /* Older than Firefox 0.9 */
        -moz-opacity:0.7;
    
        /* Safari 1.x (pre WebKit!) */
        -khtml-opacity: 0.7;
    
        /* Modern!
         * Firefox 0.9+, Safari 2?, Chrome any, Opera 9+, IE 9+ 
         */
        opacity: 0.7;
    }
    

    Opacity Reference Guide

    【讨论】:

      【解决方案2】:

      你不需要navli之间的.,所以你可以改变:

      $('nav.li')
      

      到:

      $('nav li')
      

      最终代码如下:

      $( document ).ready(function() {
          $("nav li").hover(function () {
              $(this).toggleClass("active");
          });
      });
      

      您当前的选择器$('nav.li')&lt;nav&gt; 元素与li 类匹配。您还需要将您的 css 更改为:

      nav li.active {
          opacity: .7;
      }
      

      Fiddle Demo

      【讨论】:

      • 好的,我现在只是使用悬停方法,但是为什么我的课程在离开悬停时没有切换?现在它只在我悬停时切换,当我离开并重新悬停时关闭。
      • 你查看我的演示了吗?当您将鼠标悬停并离开 li 元素时,active 类会打开和关闭
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多