好吧我觉得我疯了..。
我正在看iOs 6.0上的Mobile Safari。我似乎不能确定什么时候点击一个元素会触发点击。在许多情况下,似乎我需要点击一次来触发悬停,然后再点击一次才能触发点击。
Mobile Safari spec说:"...由单指和双指手势生成的事件流是有条件的,这取决于所选元素是可点击还是可滚动的……可点击的元素是链接、表单元素、图像地图区或具有鼠标移动、鼠标按下、鼠标向上或单击处理程序的任何其他元素……由于这些不同,您可能需要将某些元素更改为可点击的元素……“
它继续建议开发人员“单击一个虚拟的onclick处理程序,onclick = "...Add (0)”,以便iOS上的Safari将span元素识别为可单击元素。“
然而,我的测试表明这些说法是错误的。
JsFiddle:http://jsfiddle.net/6Ymcy/1/
html
<div id="plain-div" onclick="void(0)">Plain Div</div>
js
document.getElementById('plain-div').addEventListener('click', function() {
alert('click');
});
尝试点击iPad上的元素。什么都没发生
但我离题了。对我来说,重要的是找出以下问题:
在元素上单击时,确定何时会在第一次点击时触发‘’事件的标准是什么?与在第一次点击时触发'hover‘事件,在第二次点击时触发'click’事件不同。
在我的测试中,锚元素是我可以在第一次点击时触发点击的唯一元素,然后,只是偶尔和不一致的。
这就是我开始感到疯狂的地方。我广泛地搜索了互联网,几乎找不到关于这个问题的任何东西。就我一个人吗?!有人知道关于两次点击的标准和处理这些限制的方法的讨论在哪里吗?
我很乐意回答您的问题/请求。
谢谢!
发布于 2015-04-10 04:16:53
我也有同样的问题。最简单的解决方案是不在iOS (或任何支持触摸的目标平台)上绑定mouseenter
事件。如果未绑定,则不会触发悬停事件,并在第一次点击时触发click
。
发布于 2015-09-22 08:59:24
如果元素在正常状态下为"display: none;“且为"display: block;”或inline-block on :hover,则iOS将触发悬停事件。
发布于 2015-09-03 01:33:31
我首先检测它是否是iphone,然后将mouseup事件绑定到我试图调用的函数,从而解决了这个问题。
if ((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))){
$('foo').on('mouseup', function(){
...
}
}
我尝试过其他方法,但mouseup似乎效果最好。其他事件,如touchend,即使用户试图滚动,也会触发。如果你在触摸后拖动手指,Mouseup似乎不会被解雇。
iPhone检测的功劳是David Walsh (和ESPN)。http://davidwalsh.name/detect-iphone
https://stackoverflow.com/questions/17710893
复制相似问题