J'ai un seul bouton en li avec id "my_id"
. J'ai attaché deux événements jQuery avec cet élément
1.
$("#my_id").click(function() {
alert('single click');
});
2.
$("#my_id").dblclick(function() {
alert('double click');
});
Mais à chaque fois, ça me donne le single click
javascript
jquery
jquery-events
user426795
la source
la source
Réponses:
Vous devez utiliser un délai d'attente pour vérifier s'il y a un autre clic après le premier clic.
Voici l'astuce :
Usage:
ÉDITER:
Comme indiqué ci-dessous, préférez utiliser l'
dblclick
événement natif : http://www.quirksmode.org/dom/events/click.htmlOu celui fourni par jQuery: http://api.jquery.com/dblclick/
la source
dblclick
événementdblclick
c'est définitivement la voie à suivre aujourd'hui. jQuery gère également cet événement: api.jquery.com/dblclickevent.detail
est disponible, c'est le meilleur moyen de détecter un double-clic du gestionnaire de clics. Voyez cette réponse .Le comportement de l'
dblclick
événement est expliqué dans Quirksmode .L'ordre des événements pour a
dblclick
est:La seule exception à cette règle est (bien sûr) Internet Explorer avec son ordre personnalisé de:
Comme vous pouvez le voir, écouter les deux événements ensemble sur le même élément entraînera des appels supplémentaires à votre
click
gestionnaire.la source
dblclick
est même fiable ... si je clique une fois ... attendez une seconde ou deux, puis cliquez à nouveau, j'obtiens undblclick
événement sur le deuxième clic!event.detail
est disponible, c'est le meilleur moyen de détecter un double-clic du gestionnaire de clics. Voyez cette réponse .Au lieu d'utiliser plus d'états ad hoc et setTimeout, il s'avère qu'il existe une propriété native appelée à
detail
laquelle vous pouvez accéder à partir de l'event
objet!Les navigateurs modernes et même IE-9 le prennent en charge :)
Source: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail
la source
event.detail === 1
) se déclenchera toujours. Voir mon violon ou ce commentaire sur ce fil .if(evt.detail !== 1) return;
rejeter un double accidentel les clics bloqueront l'accès à ce bouton pour les utilisateurs sans souris.Une fonction simple. Aucun jquery ou autre framework n'est requis. Passez vos fonctions en paramètres
la source
el.dataset.dblclick
serait une meilleure façon de le faire maintenant.event.detail
est disponible, c'est le meilleur moyen de détecter un double-clic du gestionnaire de clics. Voyez cette réponse .J'ai peur que le comportement dépende du navigateur:
http://api.jquery.com/dblclick/
En exécutant votre code dans Firefox, l'alerte () dans le
click()
gestionnaire vous empêche de cliquer une seconde fois. Si vous supprimez cette alerte, vous obtenez les deux événements.la source
event.detail
est disponible, c'est le meilleur moyen de détecter un double-clic du gestionnaire de clics. Voyez cette réponse .Eh bien, pour double-cliquer (cliquez deux fois), vous devez d'abord cliquer une fois. Le
click()
gestionnaire se déclenche lors de votre premier clic, et puisque l'alerte apparaît, vous n'avez aucune chance de faire le deuxième clic pour déclencher ledblclick()
gestionnaire.Changez vos gestionnaires pour faire autre chose qu'un
alert()
et vous verrez le comportement. (peut-être changer la couleur d'arrière-plan de l'élément):la source
Cette réponse est devenue obsolète avec le temps, consultez la solution de @ kyw.
J'ai créé une solution inspirée de l'essentiel publié par @AdrienSchuler. Utilisez cette solution uniquement lorsque vous souhaitez lier un simple clic ET un double-clic à un élément. Sinon, je recommande d'utiliser le natif
click
et lesdblclick
auditeurs.Voici les différences:
setTimeout
pour gérer le gestionnaire de clic ou de double-clicJavascript:
Usage:
Voici l'utilisation dans un jsfiddle, le bouton jQuery est le comportement de la réponse acceptée.
jsfiddle
la source
Une autre solution Vanilla simple basée sur la réponse A1rPun (voir son violon pour la solution jQuery, et les deux sont dans celle-ci ).
Il semble que pour NE PAS déclencher un gestionnaire en un seul clic lorsque l'utilisateur double-clique, le gestionnaire en un seul clic est forcément déclenché après un délai ...
la source
event.detail
est disponible, c'est le meilleur moyen de détecter un double-clic du gestionnaire de clics. Voyez cette réponse .Voici une alternative au code de jeum pour un nombre arbitraire d'événements:
J'en ai besoin pour une application cytoscape.js .
la source
this
, qui est l'élément cliqué, et la passer au gestionnaire (à côtée
ou à sa place).Comment différencier les simples clics et les doubles clics sur un seul et même élément?
Si vous n'avez pas besoin de les mélanger, vous pouvez compter sur
click
etdblclick
chacun fera le travail très bien.Un problème survient lorsque vous essayez de les mélanger: un
dblclick
événement déclenchera également unclick
événement , vous devez donc déterminer si un simple clic est un simple clic "autonome" ou une partie d'un double clic.De plus: vous ne devez pas utiliser les deux
click
etdblclick
sur un seul et même élément :Passons maintenant aux bonnes nouvelles:
Vous pouvez utiliser la
detail
propriété de l'événement pour détecter le nombre de clics liés à l'événement. Cela rend les doubles clics à l'intérieurclick
assez faciles à détecter.Le problème demeure de détecter les clics simples et s'ils font ou non partie d'un double clic. Pour cela, nous revenons à l'utilisation d'une minuterie et
setTimeout
.Enveloppant le tout ensemble, avec l'utilisation d'un attribut de données (pour éviter une variable globale) et sans avoir besoin de compter les clics nous-mêmes, nous obtenons:
HTML:
JavaScript:
Démo:
JSfiddle
Remarques sur l'accessibilité et les vitesses de double-clic:
Il a fallu du temps pour trouver une solution satisfaisante, j'espère que cela vous aidera!
la source
Utilisez l'excellent plugin jQuery Sparkle. Le plugin vous donne la possibilité de détecter le premier et le dernier clic. Vous pouvez l'utiliser pour différencier click et dblclick en détectant si un autre clic a été suivi du premier clic.
Découvrez-le sur http://balupton.com/sandbox/jquery-sparkle/demo/
la source
J'ai écrit un simple plugin jQuery qui vous permet d'utiliser un événement personnalisé 'singleclick' pour différencier un simple clic d'un double-clic:
https://github.com/omriyariv/jquery-singleclick
la source
La bonne réponse moderne est un mélange entre la réponse acceptée et la solution de @kyw. Vous avez besoin d'un délai pour empêcher ce premier clic simple et de la
event.detail
vérification pour empêcher le deuxième clic.la source
J'aime éviter jquery (et d'autres bibliothèques 90-140k), et comme les navigateurs notés gèrent en premier le clic, voici ce que j'ai fait sur un site Web que j'ai créé (cet exemple couvre également l'obtention d'un emplacement cliqué xy local)
J'espère que cela pourra aider
la source
Basé sur la réponse d' Adrien Schuler (merci beaucoup !!!), pour Datatables.net et pour de nombreuses utilisations, voici une modification:
Fonction
Utilisation
la source
cela a fonctionné pour moi -
usage-
la source
Il suffit de publier la réponse HTML native au cas où le besoin serait d'être simple et HTML.
Ceci a bien sûr des options natives Jquery. c'est-à-dire ...
$('#id').attr('ondblclick',function(){...})
ou, comme indiqué précédemment,$('#id').dblclick(function(){...});
la source
Je sais que c'est vieux, mais ci-dessous est un seul exemple JS d'un compteur de boucle de base avec une seule minuterie pour déterminer un simple vs double clic. Espérons que cela aide quelqu'un.
la source