2010-07-31 3 views
1

J'ai un popup qui est exécuté au mouseover avec jquery.Arrêter la détection de la souris en double

Dans cette fonction j'ai un deuxième retard avant l'affichage de pop-up à l'aide settimeout

Le problème est si, dans cette seconde, ils la souris sur plusieurs fois puis plusieurs popups sont déclenchées. Ce que je dois faire est de désactiver la détection, puis de l'activer de nouveau en popup().

Comment est-ce que je pourrais faire cela?

Répondre

1

Je suppose que quelque chose comme ça

(function(){ 
    var popup_timer = 0; 
    $('#div').mouseover(function() { 
     clearTimeout(popup_timer); 
     popup_timer = setTimeout("popup()",1000); 
    }); 
}); 

code mis à jour EDIT, clearTimeout ajouté, enveloppé

+0

Cela ne semble pas fonctionner: s – Pablo

+0

a mis à jour le code – Ties

+0

Je suggère de tout emballer dans une fonction anonyme et d'utiliser 'var' sur' popup_timer'. Soyez gentil avec votre portée mondiale –

3

Vous pouvez utiliser .hover() avec un clearTimeout(), comme ceci:

$('#div').hover(function() { 
    $.data(this, 'timer', setTimeout(popup, 1000)); 
}, function() { 
    clearTimeout($.data(this, 'timer')); 
}); 

Cette opération efface le délai d'attente vous définissez si la souris part, vous devrez rester sur l'élément pendant une seconde entière pour que le popup se déclenche. Nous utilisons simplement $.data() sur l'élément pour stocker l'identifiant de la minuterie (nous savons donc ce qu'il faut effacer). L'autre changement est de ne pas passer une chaîne à setTimeout() mais plutôt une référence directement à la fonction.

Questions connexes