Tengo un solo botón en li con id "my_id"
. Adjunté dos eventos jQuery con este elemento
1.
$("#my_id").click(function() {
alert('single click');
});
2.
$("#my_id").dblclick(function() {
alert('double click');
});
Pero cada vez que me da la single click
javascript
jquery
jquery-events
user426795
fuente
fuente
Respuestas:
Debe utilizar un tiempo de espera para comprobar si hay otro clic después del primer clic.
Aquí está el truco :
Uso:
EDITAR:
Como se indica a continuación, prefiera usar el
dblclick
evento nativo : http://www.quirksmode.org/dom/events/click.htmlO el proporcionado por jQuery: http://api.jquery.com/dblclick/
fuente
dblclick
eventodblclick
definitivamente es el camino a seguir hoy. jQuery también maneja este evento: api.jquery.com/dblclickevent.detail
está disponible, es la mejor manera de detectar un doble clic desde el controlador de clics. Vea esta respuesta .El comportamiento del
dblclick
evento se explica en Quirksmode .El orden de los eventos para a
dblclick
es:La única excepción a esta regla es (por supuesto) Internet Explorer con su orden personalizado de:
Como puede ver, escuchar ambos eventos juntos en el mismo elemento resultará en llamadas adicionales a su
click
controlador.fuente
dblclick
es confiable ... si hago clic una vez ... espere un segundo o dos, luego haga clic de nuevo, ¡obtengo undblclick
evento en el segundo clic!event.detail
está disponible, es la mejor manera de detectar un doble clic desde el controlador de clics. Vea esta respuesta .En lugar de utilizar más estados ad-hoc y setTimeout, resulta que hay una propiedad nativa llamada a la
detail
que puede acceder desde elevent
objeto.Los navegadores modernos e incluso IE-9 lo admiten :)
Fuente: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail
fuente
event.detail === 1
se activará un solo clic (donde ). Vea mi violín o este comentario en este hilo .if(evt.detail !== 1) return;
rechazar el doble accidental los clics bloquearán el acceso a ese botón para los usuarios sin un mouse.Una función sencilla. No se requiere jquery u otro marco. Pasa tus funciones como parámetros
fuente
el.dataset.dblclick
sería una forma más agradable de hacer esto ahora.event.detail
está disponible, es la mejor manera de detectar un doble clic desde el controlador de clics. Vea esta respuesta .Me temo que el comportamiento depende del navegador:
http://api.jquery.com/dblclick/
Al ejecutar su código en Firefox, la alerta () en el
click()
controlador le impide hacer clic por segunda vez. Si elimina dicha alerta, obtendrá ambos eventos.fuente
event.detail
está disponible, es la mejor manera de detectar un doble clic desde el controlador de clics. Vea esta respuesta .Bueno, para hacer doble clic (hacer clic dos veces) primero debe hacer clic una vez. El
click()
controlador dispara en su primer clic y, dado que aparece la alerta, no tiene la oportunidad de hacer el segundo clic para disparar aldblclick()
controlador.Cambie sus manejadores para hacer algo diferente a un
alert()
y verá el comportamiento. (quizás cambie el color de fondo del elemento):fuente
Esta respuesta se ha vuelto obsoleta con el tiempo, verifique la solución de @ kyw.
Creé una solución inspirada en la esencia publicada por @AdrienSchuler. Utilice esta solución solo cuando desee vincular un solo clic Y un doble clic a un elemento. De lo contrario, recomiendo usar el nativo
click
y losdblclick
oyentes.Estas son las diferencias:
setTimeout
que maneje el controlador de clic o doble clicJavascript:
Uso:
A continuación se muestra el uso en un jsfiddle, el botón jQuery es el comportamiento de la respuesta aceptada.
jsfiddle
fuente
Otra solución simple de Vanilla basada en la respuesta de A1rPun (vea su violín para la solución jQuery, y ambas están en esta ).
Parece que para NO activar un controlador de un solo clic cuando el usuario hace doble clic, el controlador de un solo clic se activa necesariamente después de un retraso ...
fuente
event.detail
está disponible, es la mejor manera de detectar un doble clic desde el controlador de clics. Vea esta respuesta .Aquí hay una alternativa del código de jeum para un número arbitrario de eventos:
Necesitaba esto para una aplicación cytoscape.js .
fuente
this
, que es el elemento en el que se hace clic, y pasarlo al controlador (al ladoe
o en lugar de él).¿Cómo diferenciar entre clics simples y clics dobles en un mismo elemento?
Si no es necesario mezclarlos, se puede confiar en
click
ydblclick
y cada uno va a hacer el trabajo muy bien.Surge un problema al intentar mezclarlos: un
dblclick
evento también activará unclick
evento , por lo que debe determinar si un solo clic es un solo clic "independiente" o parte de un doble clic.Además: no debe usar ambos
click
ydblclick
en el mismo elemento :Ahora pasemos a las buenas noticias:
Puede utilizar la
detail
propiedad del evento para detectar la cantidad de clics relacionados con el evento. Esto hace que los clics dobles en el interior seanclick
bastante fáciles de detectar.El problema sigue siendo la detección de clics individuales y si forman parte de un doble clic o no. Para eso, volvemos a usar un temporizador y
setTimeout
.Envolviendo todo junto, con el uso de un atributo de datos (para evitar una variable global) y sin la necesidad de contar los clics nosotros mismos, obtenemos:
HTML:
JavaScript:
Manifestación:
JSfiddle
Notas sobre accesibilidad y velocidades de doble clic:
Me tomó un tiempo encontrar una solución satisfactoria, ¡espero que esto ayude!
fuente
Utilice el excelente complemento jQuery Sparkle. El complemento le da la opción de detectar el primer y el último clic. Puede usarlo para diferenciar entre clic y doble clic detectando si otro clic fue seguido por el primer clic.
Compruébalo en http://balupton.com/sandbox/jquery-sparkle/demo/
fuente
Escribí un complemento de jQuery simple que te permite usar un evento personalizado de 'singleclick' para diferenciar un solo clic de un doble clic:
https://github.com/omriyariv/jquery-singleclick
fuente
La respuesta correcta moderna es una mezcla entre la respuesta aceptada y la solución de @kyw. Necesita un tiempo de espera para evitar ese primer clic y la
event.detail
marca para evitar el segundo clic.fuente
Me gusta evitar jquery (y otras bibliotecas de 90-140k), y como los navegadores señalados manejan onclick primero, esto es lo que hice en un sitio web que creé (este ejemplo también cubre cómo obtener una ubicación local xy en la que se hizo clic)
Espero que ayude
fuente
Basado en la respuesta de Adrien Schuler (¡muchas gracias!), Para Datatables.net y para muchos usos, aquí hay una modificación:
Función
Utilizar
fuente
esto funcionó para mí
uso-
fuente
Simplemente publique la respuesta HTML nativa en caso de que la necesidad sea fácil y HTML.
Esto, por supuesto, tiene opciones nativas de Jquery. es decir ...
$('#id').attr('ondblclick',function(){...})
o, como se dijo anteriormente,$('#id').dblclick(function(){...});
fuente
Sé que esto es antiguo, pero a continuación se muestra un único ejemplo de JS de un contador de bucle básico con un solo temporizador para determinar un clic simple o doble. Ojalá esto ayude a alguien.
fuente