Antecedentes: Tengo un menú desplegable que básicamente funciona igual que el descrito en this other Mobile Safari Event Issue question: haga clic en un elemento de menú para mostrar el menú desplegable o haga clic en cualquier otro elemento de la página para ocultar el menú. El jQuery que oculta el menú desplegable está vinculado al evento click de uno de los padres <div>
que abarca toda la ventana. Este menú desplegable funciona A-OK en todos los navegadores, incluido Mobile Safari, y solo lo estoy describiendo aquí por el bien del contexto.onclick blocks copy + paste en Mobile Safari?
El problema: este evento onclick impide que los usuarios de Mobile Safari (probado en un iPod Touch 4.2.1 y iPad 4.3.5) obtengan la operación normal de tocar y mantener Copiar | Pegar ventana emergente en cualquier lugar de nuestro sitio. D'oh! Según mi investigación, parece que si un elemento HTML tiene definido un manejador de clics, ¿su contenido contenido no se podrá copiar?
He creado una demo despojada aquí (Actualización: estoy usando JavaScript recta en esta demostración para ilustrar que no es un tema de jQuery, pero esto no funciona con .click de jQuery() como bien): http://adamnorwood.com/ios-copypaste.html
Si abre ese enlace en Mobile Safari, no debería poder copiar el texto lorem ipsum, pero recibirá un mensaje a través de console.log() cuando haga clic en el texto para probar que el controlador de clic está disparando.
Aquí está la esencia de la misma, en caso de que enlace se cae:
<div id="content">Imagine a large block of text here...</div>
<script>
document.getElementById('content').onclick = function() {
console.log('You just clicked me!');
}
</script>
cosas I han intentado:
-webkit-user-select: text
como described hereutilizando onmouseup y otros eventos en lugar de onclick (nope).
mover el onclick a la etiqueta
<body>
o al objeto de ventanaFigura 6-4 en la iOS Handling Events documentation es relevante, pero no me lleva a ninguna grandes revelaciones acerca de qué hacer ...
¿Alguna idea? ¿Es esta la manera en que se supone que funciona, o me estoy perdiendo algo? ¿Hay alguna manera de hacer que este texto sea seleccionable, y aun así disparar el controlador de clic? O tal vez debería volver a la mesa de dibujo sobre cómo ocultar mejor el menú desplegable para evitar este problema por completo.
Este problema es particularmente malo si usa la delegación de eventos. Si tuviera que, por ejemplo, usar $ ('body'). Delegado de jquery (".myclickable '," click ", function() {...}), entonces no se seleccionaría texto en la página entera en iOS. Mi solución fue agregar ineficazmente manejadores de clics a cada uno de los enlaces que me interesan (también en un menú desplegable de texto mixto y enlace). –