jQuery 点击移动设备上的事件

jQuery Click Event on Mobile

本文关键字:事件 移动 jQuery      更新时间:2023-09-26

我在移动设备上的JQuery点击事件时遇到问题。我已经搜索了SO的答案,并发现了关于在Safari/Chrome等移动浏览器中工作的点击事件的相互矛盾的建议。

下面是我的笔,它是一个更大项目的片段。这是我在 5 分钟内为了这篇文章的目的而拼凑的东西。

桌面浏览器上执行 JS 并切换 CSS 类,但在移动设备上根本不执行。我错过了什么?

http://codepen.io/anon/pen/FknId

谢谢!

.HTML

<a href="#" class="btn-navbar-responsive">Menu</a>
<ul class="navbar-menu navbar-hidden">
    <li><a href="#">Link 1</a></li>
    <li><a href="#">Link 1</a></li>
    <li><a href="#">Link 1</a></li>
</ul>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

.JS

$(".btn-navbar-responsive").click(function() {
    $(".navbar-menu").toggleClass("navbar-hidden navbar-visible");
});

.CSS

.btn-navbar-responsive {
    padding: 15px 20px;
    color: white;
    text-decoration: none;
    font-size: 16px;
    font-family: "Helvetica";
    background-color: #50D78B;
 }

.navbar-visible {
    -webkit-transition: opacity, ease-in, 350ms;
    -moz-transition: opacity, ease-in, 350ms;
    -ms-transition: opacity, ease-in, 350ms;
    transition: opacity, ease-in, 350ms;
    -webkit-transition: top, ease-in, 350ms;
    -moz-transition: top, ease-in, 350ms;
    ms-transition: top, ease-in, 350ms;
    transition: top, ease-in, 350ms;
    top: 10px;
    opacity: 1;
    position: relative;
    z-index: 999;
}
.navbar-hidden {
    -webkit-transition: opacity, ease-in, 350ms;
    -moz-transition: opacity, ease-in, 350ms;
    -ms-transition: opacity, ease-in, 350ms;
    transition: opacity, ease-in, 350ms;
    -webkit-transition: top, ease-in, 350ms;
    -moz-transition: top, ease-in, 350ms;
    -ms-transition: top, ease-in, 350ms;
    transition: top, ease-in, 350ms;
    top: 0px;
    opacity: 0;
    position: relative;
    z-index: 999;
}

您可以尝试通过检测触摸事件来进行事件委派,如下所示检测是否支持触摸

var event= ('ontouchstart' in document.documentElement) ? "touchstart" : "click";

委托正确的事件

$(".btn-navbar-responsive").on(event, function() {
    $(".navbar-menu").toggleClass("navbar-hidden navbar-visible");
});

一个简单的解决方法是添加 CSS 属性:

cursor: pointer;

尝试 .on() 而不是 click() 事件。

http://api.jquery.com/on/

$(".btn-navbar-responsive").on('click', function() {
    $(".navbar-menu").toggleClass("navbar-hidden navbar-visible");
});