Vous devez utiliser un délai d'attente pour vérifier s'il y a un autre clic après le premier.
Voici l'astuce :
// Author: Jacek Becela
// Source: http://gist.github.com/399624
// License: MIT
jQuery.fn.single_double_click = function(single_click_callback, double_click_callback, timeout) {
return this.each(function(){
var clicks = 0, self = this;
jQuery(this).click(function(event){
clicks++;
if (clicks == 1) {
setTimeout(function(){
if(clicks == 1) {
single_click_callback.call(self, event);
} else {
double_click_callback.call(self, event);
}
clicks = 0;
}, timeout || 300);
}
});
});
}
Utilisation :
$("button").single_double_click(function () {
alert("Try double-clicking me!")
}, function () {
alert("Double click detected, I'm hiding")
$(this).hide()
})
<button>Click Me!</button>
EDIT :
Comme indiqué ci-dessous, il est préférable d'utiliser la méthode native dblclick
événement : http://www.quirksmode.org/dom/events/click.html
Ou celle fournie par jQuery : http://api.jquery.com/dblclick/
0 votes
Le simple clic devra toujours se déclencher, il est impossible de savoir si un double clic va se produire à moins qu'il ne se produise effectivement dans le temps de double clic spécifié.
8 votes
C'est possible, vérifiez ma réponse. Vous devez attendre quelques ms après le premier clic et vérifier s'il y a un nouveau clic jusqu'au moment spécifié. De cette façon, vous êtes en mesure de savoir s'il s'agit d'un simple ou d'un double clic.
0 votes
Un inconvénient dans la façon dont les choses sont câblées dans la vie, si vous vous souciez de distinguer et d'utiliser les deux événements, alors vous pouvez avoir besoin de retarder l'action du simple clic jusqu'à ce que vous sachiez s'il y a un double en cours. Si vous avez des raisons de ne pas déclencher les deux.
0 votes
Quelques exemples d'utilisation de la minuterie ici. stackoverflow.com/questions/61461518/