2012-10-12 1 views
5

루트는 어느 나는 단순히 그렇게는 document.body에 이벤트 핸들러를 첨부하는 경우이다 :document.body에 첨부 된 이벤트 리스너가 iOS6에서 실행되지 않습니까? iOS6의 이상한 행동과 비 기능 이벤트 위임을 체험

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

이 나던 예를 들어, 실행 얻을 경우 I google.com으로 이동하여 사파리 원격 웹 검사기를 통해 추가하십시오. 어떤 경우에는 페이지의 링크를 클릭하거나 직접 이벤트 핸들러가 첨부 된 요소를 클릭하면 실행됩니다. 주요 브라우저 및 iOS 5 및 4에서도 똑같이 작동합니다. 본체에 touchend를 추가하면 잠재적 인 문제 해결 방법이 될 수 있지만 브라우저가 터치 클릭으로 일부 클릭 감지를 프로그래밍하는 대신 클릭을 감지하게하는 것이 좋습니다/touchend. 이것이 iOS6 버그인지 궁금합니다. 그러나 나는 아직 그것에 대해 불평하는 다른 누군가를 보지 못했다.

+0

본인이 직접 클릭하여 본문의 직접적인 하위 항목 인 div에 클릭 핸들러를 연결하면 전체 페이지를 래핑 한 다음 작동합니다. 부작용으로 body click 이벤트도 발생하게됩니다 ... 자식 div에 이벤트가 연결되어 있지 않으면 이전에는 아무런 이벤트도 발생하지 않습니다. – bonklers

답변

0

@Bonkers ... 클릭 이벤트를 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

관련 문제