jQuery点击事件无法在移动浏览器中使用

Jon*_*rty 27 mobile jquery android ipad

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>
Run Code Online (Sandbox Code Playgroud)

这是移动设备的jQuery脚本:

$(document).ready(function(){
   $('.publications').click(function() {
       $('#filter_wrapper').show();
   });
 });
Run Code Online (Sandbox Code Playgroud)

当我在移动浏览器上单击"发布"列表项时,没有任何反应.

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

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

Hug*_*lva 41

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

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

$('li').each(function(){
    this.onclick = function() {}
});
Run Code Online (Sandbox Code Playgroud)

现在点击将由li触发,因此可以被jQuery监听.


在你的情况下,你可以将监听器更改为锚点元素,就像@ mason81一样,或者在li上使用触摸事件:

$('.menu').on('touchstart', '.publications', function(){
    $('#filter_wrapper').show();
});
Run Code Online (Sandbox Code Playgroud)

这里有一些小实验 - http://jsbin.com/ukalah/9/edit

  • 对于任何想要在没有jQuery Mobile开销的情况下使用jQuery的人来说,这是一个很好的建议.第一个例子很完美.谢谢你雨果. (6认同)

mas*_*n81 27

如果您已经(或不介意)使用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>
Run Code Online (Sandbox Code Playgroud)

你的javascript/jquery代码...返回false以停止冒泡.

$(document).ready(function(){
   $('.publications').click(function() {
       $('#filter_wrapper').show();
       return false;
   });
 });
Run Code Online (Sandbox Code Playgroud)

这应该适用于您要做的事情.

此外,我注意到您的网站在新标签/窗口中打开其他链接,这是故意的吗?

  • 我搞定了.原来我使用的是jQuery 1.5; 我升级到1.7并修复了它!非常感谢! (2认同)

und*_*ned 7

您可以使用jQuery Mobile vclick事件:

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

$(document).ready(function(){
   $('.publications').vclick(function() {
       $('#filter_wrapper').show();
   });
 });
Run Code Online (Sandbox Code Playgroud)


小智 5

我遇到了同样的问题并通过添加解决了它"mousedown touchstart"

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

融入他人