Hola usuario de nuestra página web, encontramos la solución a tu pregunta, deslízate y la verás aquí.
Solución:
Si desea hacer cosas específicas para diferentes tipos de eventos, use e.type
$('.button').on('touchstart click', function(e)
e.preventDefault(); //prevent default behavior
if(e.type == "touchstart")
// Handle touchstart event.
else if(e.type == "click")
// Handle click event.
);
Touchstart debería ocurrir antes de hacer clic, por lo que elimino el controlador de clics si el evento es de tipo touchstart. Esto parece estar funcionando bien para mis propósitos:
$('.do-popdown').on('click touchstart', handlePopdown);
function handlePopdown(e)
if(e.type == 'touchstart')
$('.do-popdown').off('click', handlePopdown).click(function(e)
// do nothing
e.stopPropagation();
e.preventDefault();
return false;
);
// do my handling...
// and nothing else:
e.stopPropagation();
e.preventDefault();
return false;
los e.stopPropagation(); e.preventDefault(); return false;
puede ser excesivo, pero lo uso en una variedad de elementos diferentes (,
,
&c.) y esto satisface mis necesidades habituales.
EDITAR: Un enfoque más general (¿mejor?) es crear algo similar al familiar .click()
carpeta de eventos:
jQuery.fn.extend(
clickOrTouch: function(handler)
return this.each(function()
var event = ('ontouchstart' in document) ? 'touchstart' : 'click';
$(this).on(event, handler);
);
);
De esta manera, solo el evento apropiado se adjunta a los elementos seleccionados.
Supongo que un nombre más “adecuado” sería .touchstartOrClick()
pero dado que es más o menos un reemplazo para .click()
Decidí comenzar el nombre con click
.
Esto se puede usar como .click()
. Por ejemplo, pon un button
dentro de un div
y correr:
$('button').clickOrTouch(doSomething);
$('div').clickOrTouch(doSomething);
function doSomething(e)
$('body').append(this.tagName + ' ' + e.type + '
');
e.stopPropagation();
Esto mostrará “clic DIV” o “inicio táctil de BOTÓN” dependiendo de cómo se active. Si esto se usa en un enlace, agregue e.preventDefault()
si es necesario en su controlador.
Este código de @Krishna no funciona para mí:
$('.button').on('touchstart click', function(e)
e.stopPropagation(); //stops propagation
if(e.type == "touchstart")
// Handle touchstart event.
else if(e.type == "click")
// Handle click event.
);
Pero este debería funcionar, como sugirió originalmente @Slashback.
$('.button').on('touchstart click', function(e)
e.preventDefault();
if(e.type == "touchstart")
// Handle touchstart event.
else if(e.type == "click")
// Handle click event.
);
.preventDefault() solo funcionó para mí en lugar de .stopPropagation(). No tengo que hacer la exageración también.
Si guardas alguna vacilación y capacidad de beneficiar nuestro escrito te recordamos dejar una crónica y con gusto lo observaremos.