【问题标题】:jquery-ui-touch-punch and .on() doesn't work on an iPadjquery-ui-touch-punch 和 .on() 在 iPad 上不起作用
【发布时间】:2014-11-26 06:50:57
【问题描述】:

我有一个严重依赖 jQuery、jQuery UI 和 jquery-ui-touch-punch 的自定义 Web 仪表板。除了 iPad 上动态内容(js 添加的元素)上的点击事件之外,一切正常。

所以这在任何地方都有效

$('.foo').click( function() {
    //whatever
});

但是动态内容上的事件在 iPad 上不起作用,像这样

$('body').on('click', '.foo', function() {
    //whatever
});

仪表板实时监控stuff,因此动态元素上的事件是必须的。 关于如何解决的任何想法?

【问题讨论】:

  • 试试 $(document).on('click','.foo',function(e){ });

标签: jquery ipad jquery-ui jquery-ui-touch-punch


【解决方案1】:

根据您的 jQuery 版本,您可能需要delegate。此外,以文档级别为目标,并反转选择器/事件顺序,如下所示:

$(document).delegate('.foo', 'click', function() {
    //whatever
});

on 可能仍然有效,在这种情况下,您的选择器/事件顺序是正确的,只需将其定位在文档级别即可。

【讨论】:

  • 尝试过(委托)并针对文档。两者都不能在 iPad 上工作。它确实让我尝试了 bind(),并且成功了!!
  • 很高兴听到这个消息!根据this post,看起来ondelegate 是移动设备的已知问题。如果它足够接近并且你想接受它,我已经修改了我的答案!
  • delegatebindon 都是同一个函数的别名,所以我很难相信只是将函数从 on 更改为 bind 有效。正如我从第一手经验中了解到的,并且正如您在 edit 中引用的线程中所详述的那样,在需要点击处理程序的元素上设置 cursor: pointer 是获取 click 处理程序的正确方法在 iOS 设备上工作。证明他们是别名:github.com/jquery/jquery/blob/master/src/event/alias.js#L24
  • @Adam 你是对的......看起来错误在其他地方。编辑答案以消除错误信息。
  • @Adam 对设置 cursor: 元素上的指针很感兴趣。我不会在我的问题所在的特定项目上尝试它,因为仪表板是为 Windows 8 平板电脑构建的——然后一位高层带来了他自己的设备......
【解决方案2】:

我按照@elzi 的回答尝试了delegate(),但没有成功。在 jquery 文档中看到 bind() 和 on() 和 delegate() 一样,试了一下,效果很好!!

$( ".foo" ).bind( "click", function() {
    //whatever
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    相关资源
    最近更新 更多