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

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

$('body').on('click', '#click', function() { alert("This alert won't work on iPad"); }); 
 div { font-size: 24px; } 
  
Click here

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

这是一个错误还是什么?

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

添加onclick=""是一个已知的解决方法,但恕我直言,更容易将您的监听器附加到的第一个子

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

将iOS上的正文光标样式更改为“指针”,一切都会完美运行。 您不必在要点击的每个元素上添加onclick =“”…

  
Click here

我知道你现在在想什么:“WTF!”。

我不确定为什么它不起作用,它可能是一个错误,但有一个很好的解决方法。 只需将onclick=""到您委派的div中,它就能完美运行

 
Click here

小提琴

iOS没有光标样式没有事件冒泡
所以在CSS中你需要添加cursor: pointer; 对元素。

 $('body').on('click', '#click', function() { alert("This alert won't work on iPad"); }); 
 #click { font-size: 24px; cursor: pointer; } 
  
Click here

我在http://www.danwellman.co.uk/fixing-jquery-click-events-for-the-ipad/找到了解决方案

做以下方法:

 var isIPad = function() { return (/ipad/i).test(navigator.userAgent); }; var isIPhone = function() { return (/iphone/i).test(navigator.userAgent); }; var isIPod = function() { return (/ipod/i).test(navigator.userAgent); }; 

以及绑定click-event-handler的位置:

 var eventName = (isIPod() || isIPad() || isIPhone()) ? "touchstart" : "click"; // if you are using jquery-mobile eventName = (isIPod() || isIPad() || isIPhone()) ? "touchstart" : "vclick"; $(".selector").bind(eventName, function(e) { //do something here }); // or $(document).on(eventName, ".selector", function(e) { //do something here }); 

而已。

我在iPhone 5C及以下版本面临此问题。
这对我有用:

 body { cursor:pointer; } 

我有一个问题,我在html主体前面添加了一条消息。 我发现[ jQuery’Click’事件上的这个问题在iOS Safari上不起作用?

我用过这个

 $('body').on('click touchstart', 'someselect', function(){}) 

它适用于iPhone 4S和iPhone 5S