9
votes

Comment effacer un délai d'expiration JavaScript défini dans une fonction

J'ai une fonction de type récursive dans JavaScript qui fonctionne comme ceci: xxx

Remarque: j'ai simplifié la fonction pour faciliter la lecture.

i avoir des balises "a" appelées comme ceci xxx

Cependant, ils ne cédent pas la minuterie, la minuterie continue de parcourir la fonction irrégrafeuse du ClearTimeOut () être appelé.

Des idées Pourquoi? Je pense que cela pourrait avoir quelque chose à voir avec un problème d'étendue ou quelque chose comme ça.


0 commentaires

6 Réponses :


0
votes

Renvoyer false sur le lien

Étant donné que vous n'utilisez pas Var Totate, il ne faut pas être un problème de précaution puisque la rotation serait dans la portée de la fenêtre. Pouvez-vous montrer le code complet?

Il est considéré comme une mauvaise codage pour entrer en ligne le script - vous devez attacher le chargement du gestionnaire d'événements de la page

également, vous ne devez pas avoir la sécurité à l'intérieur d'une fonction qui pourrait être appelée à un Image

Essayez ceci: xxx

supposant xxx


0 commentaires

2
votes

Il peut s'agir de la question de la portée afin de faire faire pivoter comme variable globale et appelez clairtimeout (rotation);

Reportez-vous Effacer l'exemple


0 commentaires

1
votes

Il peut s'agir d'un problème de cadrage si vous ne déclarez pas rotate code> en externe.

Essayez ceci: p>

var rotate = 0;
function loadThumb(thumb) {

    rotate=setTimeout(function() {
        loadThumb(next);
    }, delay);

}


0 commentaires

0
votes

Je ne suis pas sûr de ce que vous faites exactement, car autant que je puisse vous voir, vous ne postez pas tout le code, mais cela semble mieux pour moi:

<a href="#" onclick="clearTimeout(loadThumb(3));">Load thumb 3</a>


4 commentaires

Pourquoi JavaScript: - C'est défaut - et pourquoi aucun retour de faux dans la fonction?


Tandis que le Label JavaScript: n'est pas mal là-bas, il n'est pas utile non plus. Vous pouvez aussi bien écrire foo: ou bar: ou sfgasdga: . S'il vous plaît supprimer, car cela pourrait faire penser que cela est nécessaire. @MPLUGJAN: Je ne dirais pas que c'est par défaut . Dans les liens (URL), il est utilisé comme un type de protocole de sorte que le navigateur sache quoi faire, mais sur * est toujours interprété comme JavaScript (peut-être que c'est ce que vous vouliez dire, dans ce cas, NVM; )))).


Selon moi, ce n'est pas une étiquette, il est de (a été utilisé pour) dire au navigateur que le code qui arrive est JavaScript. Il n'est utile que si le navigateur est que c'est-à-dire et le premier script de la page est VBScript, car cela (au moins qu'il était utilisé) définirait la langue par défaut dans les gestionnaires d'événements en ligne vers VBScript.


Merci pour les notes. C'est mon erreur. Normalement, je place JavaScript: lorsque j'ajoute quelque chose dans l'attribut href.



14
votes

Ouais, vous devez faire pivoter une variable globale. Il suffit de le déclarer en dehors de la fonction, comme:

<a href="#" onclick="clearTimeout(rotate); loadThumb(3);">Load thumb 3</a>


2 commentaires

et retourne faux. Et ne pas avoir la rotation VaL devrait en faire un Var de Windows Scoped


Oh ouais c'est ce que je faisais, en l'appelant après avoir reçu des choses confuses, ça marche maintenant. Merci.



0
votes

Si vous devez gérer plusieurs délais d'attente, vous pouvez utiliser un objet dans la portée globale et certaines méthodes personnalisées pour créer et supprimer vos délais d'attente. Pour accéder aux méthodes, vous pouvez définir les appels dans le gestionnaire ONCLICK de vos liens (comme dans l'exemple) ou utiliser une bibliothèque comme JQuery pour les lier. XXX

J'ai aussi posté un Exemple sur jsfiddle http://jsfiddle.net/agpzs/


0 commentaires