2012-10-12 48 views
5

experimenta un comportamiento extraño y no delegación de eventos funcionamiento en iOS 6, cuya raíz es que si simplemente conectar un controlador de eventos para document.body, así como:haga clic en los detectores de eventos adjuntos a document.body no disparar en iOS6?

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

ésto no se ejecutan, por ejemplo, si Vaya a google.com y añádalo a través de safari remote webinspector. En algunos casos se ejecutará, incluso si hago clic en un enlace en la página, o si hago clic en un elemento que tiene un controlador de eventos adjunto directamente a él. Las mismas funciona bien en los principales navegadores y en iOS 5 y 4. Adición touchend al cuerpo activarán como debería y podría ser una posible solución pero en realidad es preferible dejar que el navegador detecta clics en lugar de tener que programar algunos de detección de clics en touchstart/touchend. Me pregunto si esto es un error iOS6. pero no he visto a nadie más quejarse de esto todavía.

+0

siguiente mis hallazgos, si hay que adjuntar un controlador de clic a un div que se sienta solo como un hijo directo del cuerpo, envolviendo toda la página, a continuación, que va a funcionar. Y como efecto colateral, hará que el cuerpo haga clic en el desencadenador del evento también ... si no hay ningún evento adjunto al div infantil, entonces como antes, ningún evento se desencadena en el cuerpo. – bonklers

Respuesta

0

@Bonkers ... Hacer referencia a por qué el cuerpo clic se desencadena después de instalarla en el evento Click para el div se debe únicamente a la propagación de eventos.

I replicado aquí el código que muestra que se llama dos veces en el div pero sólo una vez en el cuerpo:

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

Si quieres parar el caso de burbujeo, se podría llamar e.stopPropagation() ; o e.cancelBubble = verdadero;

+0

Sí, lo cual está bien, pero no es el error, el error es que el oyente unido al cuerpo no reacciona. Mientras que en iOS5 lo hace. – bonklers

Cuestiones relacionadas