35

jQuery click 事件似乎没有在移动浏览器中触发。

HTML如下:

<!-- This is the main menu -->
<ul class="menu">
   <li><a href="/home/">HOME</a></li>
   <li class="publications">PUBLICATIONS &amp; PROJECTS</li>
   <li><a href="/about/">ABOUT</a></li>
   <li><a href="/blog/">BLOG</a></li>
   <li><a href="/contact/">CONTACT</a></li>
 </ul>


 <!-- This is the sub-menu that is to be fired on click -->
 <div id="filter_wrapper">
   <ul id="portfolioFilter">
      <li><a href="/nutrition-related/">Nutrition related</a></li>
      <li><a href="/essays/">Essays and Nonfiction</a></li>
      <li><a href="/commissioned/">Commissioned works</a></li>
      <li><a href="/plays/">Plays and performance</a></li>
      <li><a href="/new-projects/">New Projects</a></li>
    </ul>
  </div>

这是移动端的 jQuery 脚本:

$(document).ready(function(){
   $('.publications').click(function() {
       $('#filter_wrapper').show();
   });
 });

当我在移动浏览器上单击“出版物”列表项时,没有任何反应。

您可以在此处查看该网站:http ://www.ruthcrocker.com/

不确定是否有 jQuery 移动特定事件。

4

9 回答 9

46

我知道这是一个已解决的老话题,但我刚刚回答了一个类似的问题,虽然我的回答可以帮助其他人,因为它涵盖了其他解决方案选项:

点击事件在支持触摸的设备上的工作方式略有不同。没有鼠标,所以技术上没有点击。根据这篇文章 - http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html - 由于内存限制,点击事件只能从锚点和输入元素模拟和调度。任何其他元素都可以使用触摸事件,或者通过向原始 html 元素添加处理程序来手动初始化单击事件,例如,强制列表项上的单击事件:

$('li').each(function(){
    this.onclick = function() {}
});

现在 click 会被 li 触发,因此可以被 jQuery 监听。


在您的情况下,您可以将侦听器更改为 @mason81 所提供的锚元素,或者在 li 上使用触摸事件:

$('.menu').on('touchstart', '.publications', function(){
    $('#filter_wrapper').show();
});

这是一些实验的小提琴 - http://jsbin.com/ukalah/9/edit

于 2013-08-14T23:23:58.373 回答
28

如果您已经(或不介意)使用 jQuery Mobile,Raminson 有一个很好的答案。如果你想要一个不同的解决方案,为什么不直接修改你的代码如下:

更改您遇到问题的 LI 以包含 A 标记并在那里应用类而不是 LI

<!-- This is the main menu -->
<ul class="menu">
   <li><a href="/home/">HOME</a></li>
   <li><a href="#" class="publications">PUBLICATIONS &amp; PROJECTS</a></li>
   <li><a href="/about/">ABOUT</a></li>
   <li><a href="/blog/">BLOG</a></li>
   <li><a href="/contact/">CONTACT</a></li>
 </ul>

而您的 javascript/jquery 代码...返回 false 以停止冒泡。

$(document).ready(function(){
   $('.publications').click(function() {
       $('#filter_wrapper').show();
       return false;
   });
 });

这应该适用于您正在尝试做的事情。

另外,我注意到您的网站在新选项卡/窗口中打开了其他链接,这是故意的吗?

于 2012-05-23T15:14:31.860 回答
7

您可以使用 jQuery Mobilevclick事件:

用于处理触摸设备上的 touchend 或鼠标单击事件的规范化事件。

$(document).ready(function(){
   $('.publications').vclick(function() {
       $('#filter_wrapper').show();
   });
 });
于 2012-05-23T15:07:43.317 回答
4

JqueryMobile:重要 - 使用$(document).bind('pageinit'),而不是$(document).ready()

$(document).bind('pageinit', function(){
   $('.publications').vclick(function() {
       $('#filter_wrapper').show();
   });
});
于 2012-06-04T18:01:55.427 回答
4

我遇到了同样的问题并通过添加来修复它"mousedown touchstart"

$(document).on("mousedown touchstart", ".className", function() { // your code here });

不喜欢别人

于 2019-01-11T22:12:28.597 回答
2

jQuery 中触摸和点击的解决方案(不使用 jQuery Mobile)

jQuery Mobile 站点构建您的下载并将其添加到您的页面。对于快速测试,您还可以使用下面提供的脚本。

接下来,我们可以使用以下代码片段重新连接对 $(...).click() 的所有调用:

<script src=”http://u1.linnk.it/qc8sbw/usr/apps/textsync/upload/jquery-mobile-touch.value.js”&gt;</script>

<script>

$.fn.click = function(listener) {

    return this.each(function() {

       var $this = $( this );

       $this.on(‘vclick’, listener);

    });

};
</script>

来源

于 2014-11-22T20:55:39.670 回答
2

使用此解决方案,您可能可以解决所有移动点击问题。仅使用“点击”功能,但将 z-index:99 添加到 css 中的元素:

  $("#test").on('click', function(){
    alert("CLICKED!")
  });
#test{   
  z-index:99;
  cursor:pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

<div id="test">CLICK ME</div>

信用:https ://foundation.zurb.com/forum/posts/3258-buttons-not-clickable-on-iphone

于 2019-04-11T20:01:47.210 回答
1

Vohuman 的回答将我引向了我自己的实现:

$(document).on("vclick", ".className", function() {
  // Whatever you want to do
});

代替:

$(document).ready(function($) {
  $('.className').click(function(){
    // Whatever you want to do
  });
});

我希望这有帮助!

于 2015-07-17T17:46:40.243 回答
0
$('.publications').on('mousedown touchstart', 
   $('#filter_wrapper').show();
});
于 2021-09-08T12:45:36.947 回答