jQuery mobile: ¿para cada evento de toque en vivo debería haber un evento de clic equivalente?

He reemplazado los eventos de clic en vivo de jQuery a los eventos de jQuery Mobile Tap para boost la capacidad de respuesta.

Tengo la sensación de que esta fue una mala idea por razones de compatibilidad.

¿Es necesario tener ambos eventos, y hay alguna forma de escribirlos para la misma función?

Tal como (‘clic’, ‘tocar’)

La respuesta de Billy es increíblemente completa y realmente funcionó bastante bien las pocas veces que la usé. Además, sin embargo, es posible que desee ver el plugin vmouse en JQuery Mobile , es un bash de abstraer eventos del mouse:

// This plugin is an experiment for abstracting away the touch and mouse // events so that developers don't have to worry about which method of input // the device their document is loaded on supports. 

https://github.com/jquery/jquery-mobile/blob/master/js/vmouse.js

He estado jugando con él en un proyecto en el que estoy trabajando, parece bastante receptivo en estos días. Para usar, algo como:

 $('selector').bind('vclick', function () { ... 

o

 $('selector').bind('vmousedown', function () { ... 

Puede vincular varios eventos en una llamada como esta:

 $('selector').bind('click tap',function(){ ... }) 

Esto podría estar bien en algunos buscadores / móviles, sin embargo, esto podría hacer que los eventos se activen dos veces en algunos dispositivos que activan tanto el toque como el clic.

Puede solucionarlo haciendo algún tipo de detección de dispositivo / función y agregando el controlador apropiado solo así …

 $('selector').bind( myCustomDetectionFunction() ? 'click' : 'tap' ,function(){ ... }) 

Además, creo que touchstart y mousedown son mejores eventos para elegir. Esto se debe a que, después de un toque, el evento click no se dispara hasta que ha transcurrido un retraso, ya que el sistema permite la posibilidad de un segundo toque para hacer un doble clic o para que se convierta en un gesto de deslizamiento y así sucesivamente. El evento touchstart se dispara inmediatamente, al igual que mousedown por lo que debería ser más receptivo.

Hemos desarrollado una pequeña secuencia de comandos para resolver ese problema. Simplemente instálelo a nivel mundial y sus eventos de clic se activarán inmediatamente sin ningún problema con el evento retrasado.

https://github.com/cargomedia/jquery.touchToClick

Parece que jQuery Mobile ya tiene un evento que hace precisamente eso:

 $(function(){ $('selector').bind('vclick', function(e){ alert('test'); return false; }); }); 

Puede usar el plugin vmouse de jQuery. Esto resolverá el retraso de 300 ms en los eventos de clic (solo para dispositivos móviles), así como los casos en los que se activan los eventos de clic y toque.

Para obtener solo el plugin vmouse, use el jQuery Mobile Download Builder . Inclúyalo después de jQuery pero antes de cualquier script que dependa de este complemento.

El evento relevante es vclick , el uso básico es el siguiente:

 $(".selector").on( "vclick", function( event ) { // To execute });