Impedir el evento de clic después de manejar el evento de toque de jQuery Mobile en iOS

Para mejorar la capacidad de respuesta en nuestra aplicación web en iPad, pasé de responder al evento de clic para responder al evento "toque" de jQuery Mobile. Funciona muy bien y es mucho más sensible, pero introdujo un nuevo error.

Cuando los usuarios tocan la pantalla en un iPad, iOS envía los events TOUCHSTART y TOUCHEND que jQuery Mobile trata como un "toque". Pero luego, 300 ms después, iOS envía un evento de "clic". Si respondo al "toque" avanzando a la página siguiente antes de que el "clic" ocurra, entonces la página siguiente recibe el "clic" y si un button en la nueva página aparece en la location del toque, entonces se hace clic .

Por ahora, mi solución es proporcionar al usuario comentarios visuales en respuesta al "toque", pero espere el "clic" antes de pasar a la página siguiente.

Mi pregunta es si es posible manejar el "toque" y, de alguna manera, decirle a Safari o a iOS que no envíen el "clic".

puedes decir;

$('elementsSetThatCanBeTapped').on('tap', function(e) { e.preventDefault(); e.stopPropagation(); $(this).off('click'); }) 

Un evento de clic que se registra en la misma location en la que se produjo un toque se conoce como Click fantasma. jQuery Mobile tiene una solución parcial en sus vmouse Events.

Pero para un buen resumen de sus opciones, no puede pasar: http://www.appwards.nl/blog/2013/01/26/javascript-powenetworking-webapps-and-click-versus-tap

Debe poder agregar un retorno falso o e.stopPropagation() y adjuntar la misma function a ambos, toque y haga clic de esa manera solo se e.stopPropagation() uno de esos events.

Si aún desea poder utilizar la aplicación web en una computadora sin pantalla táctil, puede considerar utilizar el evento de clic junto con la biblioteca de acceso rápido: https://github.com/ftlabs/fastclick Esta biblioteca elimina la 300 ms de retraso automáticamente.