2012-10-12 55 views
5

經歷iOS6的奇怪行爲和非功能事件委託,根這是,如果我只是將一個事件處理document.body的,像這樣:單擊事件監聽器附加到document.body不在iOS6中觸發?

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

這並不得到運行,例如,如果我去google.com並通過safari遠程webinspector添加。在某些情況下,它會運行,包括如果我點擊頁面上的鏈接,或者點擊直接附加了事件處理程序的元素。在主流瀏覽器以及iOS 5和4中也是如此。在向body添加touchend時會觸發它,因爲它可能是潛在的解決方法,但最好讓瀏覽器檢測點擊,而不必在touchstart中編寫一些點擊檢測/ touchend。我想知道這是不是iOS6的錯誤。但我還沒有看到任何人抱怨這個呢。

+0

以下我的發現,如果我將一個單擊處理程序附加到一個單獨作爲身體的直接子節點的div,將整個頁面包裝起來,那麼這將起作用。而作爲副作用,這將使身體點擊事件觸發器以及...如果沒有事件附加到子div,那麼沒有事件觸發正文。 – bonklers

回答

0

@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;

+0

是的,這是好的,但這不是錯誤,錯誤是附加到身體的聽衆不反應。而在iOS5中呢。 – bonklers

相關問題