单击附加到document.body的事件监听器不要在iOS6中触发?

时间:2012-10-12 15:18:56

标签: javascript event-handling ios6 delegation

在iOS6中遇到奇怪的行为和非功能事件委托,其根源是如果我只是将一个事件处理程序附加到document.body,如下:

document.body.addEventListener("click", function(){alert("ios6 sucks")}, false);

这不会运行,例如,如果我去google.com并通过safari远程webinspector添加它。在某些情况下,它会运行,包括如果我点击页面上的链接,或者点击一个直接附加了事件处理程序的元素。在主流浏览器和iOS 5和4上同样可以正常工作。添加touchend到body会触发它应该是一个潜在的解决方法但是最好让浏览器检测点击而不是在touchstart中编写一些点击检测/ touchend。我想知道这是不是iOS6的bug。但我还没有看到其他人抱怨过这个。

2 个答案:

答案 0 :(得分:0)

@Bonkers ...引用将click事件附加到div后触发正文的原因仅仅是因为事件冒泡。

我在这里复制了你的代码,显示它在div上被调用两次,但只在身体上调用一次:

<div id="myDiv">FlackAttack Test</div>

<script>
document.body.addEventListener("click", function(){alert("ios6 sucks")}, false);
document.getElementById('myDiv').addEventListener('click', function(){alert("ios6 sucks twice")},      false);
</script>

如果你想阻止事件冒泡,你可以调用e.stopPropagation();或e.cancelBubble = true;

答案 1 :(得分:0)

遇到同样的问题。以下帮助(省略 .body):

document.addEventListener("click", function(){alert("ios6 sucks")}, false);