【问题标题】:jQuery click events not working in iOS [duplicate]jQuery单击事件在iOS中不起作用[重复]
【发布时间】:2013-01-25 14:22:02
【问题描述】:

第二次更新:看起来我的一个函数 (resetFigures) 阻止了事件处理程序,因此将其移至绑定函数的末尾进行了整理。

更新:经过一些基本测试后,我意识到点击事件正在注册,只是点击时框无法翻转。

我的网站具有在 Chrome 和 Firefox 中运行的基本美学功能,但它拒绝在 iOS 上正常运行(在装有 iOS 6.1 的 iPhone 4 和装有 iOS 4.3.5 的 iPad 上测试)。

您可以在此处查看该站点,当然还有脚本 (main.js):http://bos.rggwebdesigns.com/

我读到 iOS 并没有真正正确地处理 jQuery 点击事件,但我正在努力寻找解决办法。 Stack Overflow 上的几个线程提到了 live() 方法,但如下实现它(以及将onclick="" 添加到可点击元素)似乎不起作用:

$('.card').live('click touchstart', function() {
        var figure = $(this).children('.back');
        var button = figure.find('.button');
        var column = $(this).parents().eq(1);
        $('.column').removeAttr('style');
        column.css('z-index', 2000);
        resetFigures();
        if(flipCard(this)){
            swoosh.pause();
            swoosh.currentTime = 0;
            swoosh.play();
        }
    });

我还遇到了这个有趣的解决方法项目:http://aanandprasad.com/articles/jquery-tappable/。 但是,我也没有运气:

$('.card').tappable(function() {
        var figure = $(this).children('.back');
        var button = figure.find('.button');
        var column = $(this).parents().eq(1);
        $('.column').removeAttr('style');
        column.css('z-index', 2000);
        resetFigures();
        if(flipCard(this)){
            swoosh.pause();
            swoosh.currentTime = 0;
            swoosh.play();
        }
    });

另外,如果我被误导了,请纠正我,但根据这个网站,iOS 支持 3D 转换,并带有适当的前缀:http://caniuse.com/transforms3d

【问题讨论】:

标签: jquery ios css click transform


【解决方案1】:

iOS 未注册绑定到在 DOM 加载后添加的元素的点击/触摸事件存在问题。

虽然 PPK 有此建议:http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html

我发现这很容易解决,只需将其添加到 css 中:

cursor: pointer;

【讨论】:

  • 哇……这怎么是真的?!这次Safari完成了。这篇 Quirksblog 文章进一步澄清了这一点:quirksmode.org/blog/archives/2010/10/click_event_del_1.html
  • 几年后这个修复仍然适用......让你想知道这个问题是否会在 iOS 中得到解决。
  • 几年前在一些苹果办公室:“让我们依靠一个css值来决定我们是否应该注册一个点击事件”。天才!
  • 2018... 仍然是一个问题,5 年了,他们还没有解决这个问题
  • 在 2019 年仍然相关 :)
【解决方案2】:

最近在为客户开发 Web 应用程序时,我注意到添加到非锚元素的任何点击事件在 iPad 或 iPhone 上都不起作用。所有台式机和其他移动设备都运行良好 - 但由于 Apple 产品是最受欢迎的移动设备,因此修复它很重要。

事实证明,在 jQuery 中分配了点击处理程序的任何非锚元素都必须具有 onClick 属性(可以为空,如下所示):

onClick=""

元素css需要有如下声明:

cursor:pointer

奇怪,但这就是让事情再次正常运转所需要的!
来源:http://www.mitch-solutions.com/blog/17-ipad-jquery-live-click-events-not-working

【讨论】:

  • 太奇怪了。 a{cursor:pointer;} 为我工作
  • * { /* To receive click events on iOS */ cursor: pointer; }
  • 谢谢。将onClick="" 添加到我的<div> 中,它有一个jQuery onClick 处理程序,效果很好。在添加此 onClick 属性之前,它在除 Safari iOS 之外的任何地方都可以使用。
【解决方案3】:

您应该绑定点击事件,移动Safari或UIWbview中不存在点击。 您也可以使用此polyfill,以避免触摸链接时的 300 毫秒延迟。

【讨论】:

  • 我尝试使用和不使用 jQuery Mobile 的 'tap' 和 'vclick' 来实现 bind(),但没有成功。由于在 iOS 上点击定义了:hover 的元素相当于鼠标悬停,悬停伪元素是否可能会产生干扰?
  • 我不知道悬停很抱歉
  • 没关系。只需确保每个:hover 选择器前面都有.no-touch。仍然没有修复事件处理。
猜你喜欢
  • 2018-02-02
  • 1970-01-01
  • 2012-09-30
  • 2023-03-28
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 2018-09-18
  • 2013-05-31
相关资源
最近更新 更多