iOS6中遇到奇怪的行为和无法正常工作的事件委派,其根源是如果我简单地将事件处理程序附加到document.body,如下所示:
document.body.addEventListener("click", function(){alert("ios6 sucks")}, false);
这不会运行,例如,如果我转到 google.com 并通过 Safari 远程网络检查器添加它。在某些情况下,它将运行,包括如果我单击页面上的链接,或者单击直接附加了事件处理程序的元素。在主要浏览器以及iOS 5和4上同样有效。将触摸端添加到正文将按应有的方式触发,并且可能是一种潜在的解决方法,但最好让浏览器检测点击,而不必在 touchstart/touchend 中编程一些点击检测。我想知道这是否是iOS6错误。但我还没有看到其他人抱怨这一点。
@Bonkers ...引用为什么在将点击事件附加到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;
面临同样的问题。以下帮助(省略 .body):
document.addEventListener("click", function(){alert("ios6 sucks")}, false);