comment différencier événement de clic et double-cliquez sur l'événement?
J'ai un seul bouton en li id "my_id"
. J'ai attaché two jquery
événements avec cet élément
1.
$("#my_id").click(function() {
alert('single click');
});
2.
$("#my_id").dblclick(function() {
alert('double click');
});
Mais à chaque fois il me donne l' single click
- La seul clic aurez toujours à feu, il est impossible de savoir si un double-clic va se produire à moins qu'il se produit réellement au sein de la double cliquez sur le temps.
- C'est possible, vérifier ma réponse. Vous devez attendre quelques ms après le premier clic et vérifier si il y a un nouveau clic jusqu'à l'heure spécifiée. De cette façon, vous êtes en mesure de savoir si c'est un simple ou un double-clic.
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'utiliser un délai d'attente de vérifier si il y a un autre, clic après clic.
Voici l'astuce:
Utilisation:
EDIT:
Comme indiqué ci-dessous, préférez l'utilisation de la maternelle
dblclick
événement: http://www.quirksmode.org/dom/events/click.htmlOu celui qui est fourni par jQuery: http://api.jquery.com/dblclick/
dblclick
événementdblclick
est définitivement le chemin à parcourir aujourd'hui. jQuery gère également ce cas: api.jquery.com/dblclickLe comportement de la
dblclick
événement est expliqué au Quirksmode.L'ordre des événements pour un
dblclick
est:La seule exception à cette règle est (bien sûr) d'Internet Explorer avec leur ordre de:
Comme vous pouvez le voir, l'écoute de ces deux événements ensemble sur le même élément entraînera des appels supplémentaires à votre
click
gestionnaire.dblclick
est encore fiable... si je clique une fois... attendez une seconde ou deux, puis cliquez de nouveau, je reçois undblclick
événement sur le deuxième clic!Une fonction simple. Pas de jquery ou autre cadre est nécessaire. Passer vos fonctions en tant que paramètres
el.dataset.dblclick
serait une belle façon de le faire maintenant.J'ai peur que le comportement du navigateur dépendante:
http://api.jquery.com/dblclick/
L'exécution de votre code dans Firefox, l'alert() dans le
click()
gestionnaire ne vous empêche de cliquer une seconde fois. Si vous supprimez une telle alerte, vous obtenez les deux événements.Bien pour double-cliquez sur (cliquez deux fois), vous devez d'abord cliquer sur une fois. Le
click()
gestionnaire feux sur votre premier clic, et depuis le message d'alerte apparaît, vous n'avez pas la chance de faire le deuxième clic pour tirer ledblclick()
gestionnaire.Changer vos gestionnaires à faire autre chose qu'un
alert()
et vous verrez le comportement. (peut-être changer la couleur d'arrière-plan de l'élément):Aucune de ces réponses satisfait mes besoins, j'ai donc créé une solution inspirée par le gist posté par @AdrienSchuler. Utiliser cette solution que si vous voulez lier un seul clic ET double-cliquez sur un élément. Sinon, je recommande d'utiliser le natif
click
etdblclick
auditeurs.Ces différences:
setTimeout
pour gérer le clic ou double-cliquez sur gestionnaire deJavascript:
Utilisation:
Ci-dessous est l'utilisation dans un jsfiddle, le jQuery, le bouton est le comportement de la accepté de répondre.
jsfiddle
setTimeout
, cela casse l'utilisateur une expérience pour moi.Au lieu d'utiliser les plus ad-hoc des états et setTimeout, il s'avère qu'il est natif de la propriété appelée
detail
que vous pouvez accéder à partir de laevent
objet!Les navigateurs modernes et même IE-9 prend en charge 🙂
Source: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail
event.detail === 1
) va encore déclencher. Voir mon violon ou ce commentaire sur ce fil.Un autre simple à la Vanille solution basée sur le A1rPun réponse (voir son violon pour le jQuery solution, et les deux sont en cette une).
Il semble que pour ne PAS déclencher d'un simple clic gestionnaire lorsque l'utilisateur double-clique, le seul gestionnaire de clic est nécessairement déclenchée après un délai...
D'utiliser l'excellent jQuery Éclat plugin. Le plugin vous donne la possibilité de détecter le premier et le dernier clic. Vous pouvez l'utiliser pour différencier entre le clic et double clic en détectant si un autre clic a été suivie par le premier clic.
Vérifier à http://balupton.com/sandbox/jquery-sparkle/demo/
Voici une autre de jeum code pour un nombre arbitraire d'événements:
Nécessaire pour un cytoscape.js app.
this
, qui est l'élément cliqué, et de le transmettre au gestionnaire (à côté de lae
ou à la place de celui-ci).J'ai écrit un simple plugin jQuery qui vous permet d'utiliser un personnalisé", cliquez une fois l'événement de différencier un simple clic à partir d'un double-clic:
https://github.com/omriyariv/jquery-singleclick
Comment faire la différence entre les simples clics et double clique sur un seul et même élément?
Si vous n'avez pas besoin de les mélanger, vous pouvez compter sur
click
etdblclick
et chacun d'eux de faire le travail tout aussi bien.Un problème se pose lorsque vous essayez de les mélanger: un
dblclick
événement va déclencher uneclick
événement ainsi, de sorte que vous devez déterminer si un seul clic est un "stand-alone" seul clic ou un double clic.En outre: vous ne devez pas utiliser deux
click
etdblclick
sur un seul et même élément:Maintenant la bonne nouvelle:
Vous pouvez utiliser l'événement
detail
propriété pour détecter le nombre de clics liées à l'événement. Cela fait un double-clic à l'intérieur declick
assez facile à détecter.Le problème reste de détecter une seule clique et si oui ou non ils font partie d'un double clic. Pour cela, nous sommes de retour à l'aide d'une minuterie et
setTimeout
.Enveloppant, tous ensemble, avec l'utilisation d'un attribut de données (pour éviter une variable globale) et sans avoir besoin de compter les clics de nous-mêmes, nous obtenons:
HTML:
JavaScript:
Démo:
JSfiddle
Notes sur l'accessibilité et double-cliquez vitesses:
Il a fallu un certain temps pour trouver une solution satisfaisante, j'espère que cela aide!
Je tiens à éviter de jquery (et les autres 90-140k libs), et comme l'a noté les navigateurs gérer onclick tout d'abord, voici donc ce que j'ai fait sur un site que j'ai créé (cet exemple couvre également l'obtention d'un cliqué sur l'emplacement local x, y )
espère que ça aide