首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery on()不适用于移动Safari

jQuery on()不适用于移动Safari
EN

Stack Overflow用户
提问于 2012-03-26 23:50:57
回答 8查看 10.1K关注 0票数 3

我希望使用toggleClass文件动态生成jQuery $.ajax({.})生成的列表。它在带有Safari和Chrome的桌面上工作得很好,但在移动Safari上却不行。委托和直播也不能在手机上工作。

我使用的是jQuery 1.7.2 iPad (iOS 5.1) iPhone (iOS 5.0.1)

不使用jQuery手机

jQuery文档建议使用.on()而不是.live(),因为从1.7开始就不推荐live

oringal html

代码语言:javascript
复制
<ul id="movies">
   /* empty */
</ul>

动态构建后

代码语言:javascript
复制
<ul id="movies">
    <li>Movie-1</li>
    <li>Movie-2</li>
    <li>Movie-3</li>
</ul>

以下内容适用于桌面Safari和Chrome,但不适用于移动Safari。

代码语言:javascript
复制
$(document).on('click', '#movies li', function() {
    $(this).toggleClass('selected');
});

cyrusv似乎也问过一个类似的问题,他自己也回答了这个问题,但他没有详细说明。https://stackoverflow.com/a/9538134/372567说:

向div元素添加onclick='‘。不知道为什么会起作用,但确实起作用了。-

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-03-26 23:59:06

将事件绑定到document元素并不是最佳实践,您应该这样做:

代码语言:javascript
复制
$('#movies').on('click', 'li', function() {
    $(this).toggleClass('selected');
});
票数 4
EN

Stack Overflow用户

发布于 2014-03-14 15:37:36

因此,为了总结这一切,在我到达这里之前,我花了几个小时的调试/浏览时间:

要使事件绑定在Ajax调用后保持不变,需要将它们绑定到文档而不是元素,例如:

而不是:

代码语言:javascript
复制
$('.foo').on('click', function() { ... }

使用:

代码语言:javascript
复制
$( document ).on('click', '.foo', function () { ... }

但是这个文档绑定不会在Safari上工作,除非您在元素的iOS中也包含了onclick=""。奇怪但却是真的。

票数 4
EN

Stack Overflow用户

发布于 2013-08-07 06:56:10

我在使用on()时也有类似的问题。它在桌面上的chrome和safari上工作,但在任何移动浏览器上都不工作。正如cyrusv所建议的那样,解决办法是这样做:

JQuery:

代码语言:javascript
复制
$('#questions').on('click', 'li', function() {
    ....
});

从以下位置更改HTML:

代码语言:javascript
复制
<div id="questions"> 
  <li>...</li>
  <li>...</li>
</div> 

至:

代码语言:javascript
复制
<div id="questions"> 
  <li onclick=''>...</li>
  <li onclick=''>...</li>
</div> 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9881509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档