2010-09-28 3 views
2

Je suis très nouveau dans JS et j'essaie de modifier le système de megamenu JavascriptKit basé sur jQuery pour retarder l'affichage du menu jusqu'à ce que la souris planait sur l'objet d'ancrage pendant une durée spécifiée. Le problème auquel je suis actuellement confronté est qu'il semble que le clearTimeout qui est appelé au "mouseout" ne suspende que setTimeout, plutôt que de l'annuler, de l'effacer, de le réinitialiser.Javascript: clearTimeout semble seulement suspendre, ne pas réinitialiser ou effacer?

À ce stade, je montre juste une alerte après un appel setTimeout. Actuellement, j'ai l'intervalle de délai d'attente fixé à 2000 pour les tests. Par exemple, comme je l'ai réglé à 2 secondes de retard en ce moment, si je souris sur l'objet 4 fois pendant 1/2 seconde, la 5ème fois que je souris sur l'objet ma boîte d'alerte de test apparaît instantanément.

Je pensais que clearTimeout était supposé détruire complètement l'événement chronométré. Pourquoi semble-t-il seulement faire une pause dans le compte à rebours?

teststuff:function(){ 
    if(jkmegamenu.toggletest==1) 
    { 
     jkmegamenu.executetimedcommand() 
     jkmegamenu.toggletest=0 
    } 
    else 
    { 
     //jkmegamenu.executetimedcommandcancel() 
     clearTimeout(jkmegamenu.teststuff); 
    } 
    }, 

    executetimedcommand:function(){ 
     if(jkmegamenu.toggletest==1) 
     { 
      alert('abcde') 
     } 
    }, 

    canceltimedcommand:function(){ 
    clearTimeout(jkmegamenu.teststuff); 
}, 
+0

Veuillez utiliser le code. –

+0

Ceci est mon premier post ici. J'ai trouvé le bouton de code. Va l'utiliser la prochaine fois. –

+0

ne pas oublier d'accepter une réponse si elle résout votre problème (* toux * mine * toux *): D – lincolnk

Répondre

4

clearTimeout prend un id de la minuterie en tant que paramètre, et non pas d'une référence de fonction.

par exemple, si vous configurez un délai d'attente pour jkmegamenu.teststuff, vous feriez comme ça

// set the delayed call 
var timerID = setTimeout(jkmegamenu.teststuff, 2000); 

// cancel it 
clearTimeout(timerID); 
timerID = 0; 
+0

Très utile. Je vous remercie! –

0

vous définissez « teststuff » en fonction, et passer ensuite à clearTimeout(). Ce que vous passez à clearTimeout() doit renvoyer la variable de setTimeout(). Si vous affectez la valeur de retour de setTimeout() à "teststuff", alors vous la redéfinissez, vous ne pourrez pas passer la valeur d'origine à clearTimeout().

+0

Très utile. Je vous remercie! –

Questions connexes