Si obtiene 2 alertas, parece que su umbral para detectar un doble clic es demasiado pequeño. Intenta aumentar de 150 a 300 ms.
Además, no estoy seguro de que tenga garantizado el orden en el que se activan los clics y los clics. Por lo tanto, cuando se apaga su doble clic, borra el primer clic en el evento, pero si se dispara antes del segundo evento de "clic", este segundo evento se disparará solo, y usted terminará con un doble haga clic en activación de evento y activación de evento de un solo clic.
veo dos soluciones posibles a este problema potencial:
1) juego otro tiempo de espera para llegar a disparar el evento de doble clic. Marque en su código que el evento de doble clic está a punto de disparar. Luego, cuando se activa el segundo evento de 'solo clic', puede verificar este estado y decir "oops, dbl haga clic en pendiente, así que no haré nada"
2) La segunda opción es intercambiar las funciones de destino basado en eventos de clic. Puede ser algo como esto:
window.onload = function() {
var timer;
var el = document.getElementById('testButton');
var firing = false;
var singleClick = function(){
alert('Single');
};
var doubleClick = function(){
alert('Double');
};
var firingFunc = singleClick;
el.onclick = function() {
// Detect the 2nd single click event, so we can stop it
if(firing)
return;
firing = true;
timer = setTimeout(function() {
firingFunc();
// Always revert back to singleClick firing function
firingFunc = singleClick;
firing = false;
}, 150);
}
el.ondblclick = function() {
firingFunc = doubleClick;
// Now, when the original timeout of your single click finishes,
// firingFunc will be pointing to your doubleClick handler
}
}
Básicamente lo que está sucediendo aquí es que dejes que el tiempo de espera original que establezcas continúe. Siempre llamará a dispararFunc(); Lo único que cambia es a lo que apuntaba en realidad el disparo de Func(). Una vez que se detecta el doble clic, lo establece en doubleClick. Y luego siempre volvemos a SingleClick una vez que expira el tiempo de espera.
También tenemos una variable de "disparo" allí, así que sabemos interceptar el segundo evento de un solo clic.
Otra alternativa es ignorar eventos DblClick del todo, y justo detectarlo con los clics individuales y el temporizador:
window.onload = function() {
var timer;
var el = document.getElementById('testButton');
var firing = false;
var singleClick = function(){
alert('Single');
};
var doubleClick = function(){
alert('Double');
};
var firingFunc = singleClick;
el.onclick = function() {
// Detect the 2nd single click event, so we can set it to doubleClick
if(firing){
firingFunc = doubleClick;
return;
}
firing = true;
timer = setTimeout(function() {
firingFunc();
// Always revert back to singleClick firing function
firingFunc = singleClick;
firing = false;
}, 150);
}
}
Esto no se ha probado :)
cuando obtiene sus alertas en Una, es siempre de dos en dos, o usted consigue a veces sólo una alerta? – Matt
A veces solo obtengo uno. –