【问题标题】:Dealing with mouseenter and mouseleave on the iPad在 iPad 上处理 mouseenter 和 mouseleave
【发布时间】:2013-10-15 14:01:53
【问题描述】:

我有一个典型的下拉菜单,默认情况下它是隐藏的,但通过以下 jQuery 魔法

<ul class="navNew">
    <li  class="test">
        <a href="#">OPTION</a>
        <ul>
            <li>Suboption -- Hidden</li>
        </ul>
    </li>
</ul>

$(".navNew li").unbind('mouseenter mouseleave').bind('mouseenter mouseleave', function() {
    $(this).toggleClass('hover');                                  
});

因此,使用 mouseenter 和 mouseleave,“悬停”类将添加到菜单中以使其可见或将其关闭以使其再次不可见。

这一切都像一个魅力,问题出在 iPad 上。单击将充当 mouseenter,但再次单击按钮不会充当 mouseleave,因此菜单永远不会再次关闭。是否可以修改此代码,以便单击也可以打开和关闭此菜单?

我创建了一个 jsFiddle 来解释我的菜单在做什么:http://jsfiddle.net/qgrt5/

【问题讨论】:

  • 使用“onclick”事件w3schools.com/jsref/event_onclick.asp
  • @JoeDF 我仍然想保持悬停功能。如果我将单击添加到绑定中,则单击确实有效,但是如果在单击后将鼠标移开,它将切换悬停,因此将反转(鼠标关闭时可见)
  • @JoeDF 不是吗?我的代码已经在鼠标悬停时起作用。问题是是否可以将点击添加到此功能中
  • @JoeDF 是的,有一个小提琴,查一下 :) :)

标签: javascript jquery html


【解决方案1】:

工作示例: http://jsfiddle.net/qgrt5/

编辑:下面的代码现在将检查用户是否来自 iPad,如果是,它将使用 click 函数而不是 mouseenter

var isiPad = navigator.userAgent.match(/iPad/i) != null;

if (isiPad) {
    $(".navNew li").unbind('mouseenter mouseleave').bind('mouseenter mouseleave', function() {
        $(this).toggleClass('hover');                                       
    });
}
else {
  $(".navNew li").unbind('mouseenter mouseleave').bind('mouseenter mouseleave', function() {
        $(this).toggleClass('hover');                                       
   });
}

【讨论】:

  • 它确实适用于点击,但我也想保持悬停功能。这里的关键是除了悬停之外还有点击工作,以便它在悬停时起作用
  • @Mark 我已经更新,以便它同时使用点击和悬停 - 并检测 ipad
  • 这不会检测到任何其他类型的平板电脑。 iPad 是少数。
  • 只需使用 $(...).on('click mouseenter')
  • 这毫无意义。 if/else 语句的意义何在?无论条件如何,都会执行相同的确切代码。它实际上毫无意义。
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多