jQuery .on()和.delegate()在iPad上不起作用

Mar*_*in. 30 javascript jquery delegation ipad

如果您在桌面上尝试此代码段,一切正常.
每当你在iPad上试用它时,它都不会做任何事情.

$('body').on('click', '#click', function() {
    alert("This alert won't work on iPad");
});
Run Code Online (Sandbox Code Playgroud)
div { 
  font-size: 24px; 
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="click">Click here</div>
Run Code Online (Sandbox Code Playgroud)

简单的.click()处理程序工作,但它不是我想要的.这同样适用于.delegate();.live()

这是一个bug还是什么?

mdd*_*ddw 34

这是一个Safari移动bug /功能:点击事件不会一直冒泡到身体.

添加onclick=""是一个已知的解决方法,但恕我直言,更容易将听众附加到第一个孩子<body>.

请参阅:http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html


Bor*_*oro 30

将iOS上的主体的光标样式更改为"指针",一切都将完美运行.您不必在要点击的每个元素上添加onclick =""...

<script type="text/javascript">
    $(function() {
        // The trick
        if (/ip(hone|od)|ipad/i.test(navigator.userAgent)) {
           $("body").css ("cursor", "pointer");
        }
        // The test
        $("body").on("click", "#click", function() {
            alert("This also works on iOS !");
        });
    });
</script>
<div id="click">Click here</div>
Run Code Online (Sandbox Code Playgroud)

我知道你现在在想什么:"WTF!".

  • 我发现这个奇怪的行为的最佳解释是在这里(http://swsharinginfo.blogspot.in/2013/03/solution-for-click-event-issue-on-ipad.html).总之,IPad/pod/phone上的第一次触摸被视为悬停.为了告诉浏览器该元素是可点击的,您需要添加cursor:指向该元素的指针.注意1.将"cursor:pointer"添加到底层元素$('#myElement')而不仅仅是$('myElement:hover').注2.您可以简单地**将**`cursor:pointer`**添加到您的css**.它对我有用! (5认同)

Mar*_*in. 12

我不确定为什么它不起作用,它可能是一个错误,但有一个很好的解决方法.简单地说onclick="",你委托的div,它将完美地工作

<div id="click" onclick="">Click here</div>
<script>
$("body").on("click", "#click", function() {
    alert("This works on iPad");
});
</script>
Run Code Online (Sandbox Code Playgroud)

小提琴

  • [提出问题并立即回答是完全可以的.](http://meta.stackexchange.com/questions/17845/etiquette-for-answering-your-own-question)即使我以前做过.如果您有任何异议,请随意在meta上提出; 不要劫持答案的评论主题.谢谢. (4认同)

Sim*_*old 11

iOS没有光标样式没有事件冒泡.
因此,在CSS中,您需要添加cursor: pointer;到元素中.

$('body').on('click', '#click', function() {
    alert("This alert won't work on iPad");
});
Run Code Online (Sandbox Code Playgroud)
#click { 
  font-size: 24px; 
  cursor: pointer;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="click">Click here</div>
Run Code Online (Sandbox Code Playgroud)

我知道它很久以前就被问过,但我认为一个简单的CSS解决方案可能有所帮助.

  • 西蒙,你摇滚!这是对此行为的简单解释和快速解决方法.你救了我的一天. (2认同)