10
votes

Pourquoi la fonction Settimeout () ne fonctionne qu'une seule fois?

Je fais un bookmarklet JavaScript qui redimensionne toutes les images, périodiquement.

javascript: function x(){
    for(i=0;i<=document.getElementsByTagName('img').length;i++)
        document.getElementsByTagName('img')[i].width+=1;
};
t = window.setTimeout("x()",100);
void(0);


3 commentaires

Qu'est-ce que vous essayez d'accomplir? De plus, votre boucle à la fin est probablement censée être i ++ .


Vous ne devriez pas faire i <= document.getelementsbytagname ('img'). Longueur . Vous resélectionnez toutes les images du document autant de fois qu'il existe des images. Vous devriez mettre en cache la sélection. var images = document.getelementsByname ('img'); Pour (var i = 0, len = images.length; i Avis également que j'ai fait << / code> au lieu de <= .


semble un peu inutile parce que si vous n'arrêtez pas que les images de la minuterie vont grandir pour toujours.


6 Réponses :


0
votes

Voici le même code correctement en retrait pour la clarté xxx

window.seetticout () exécute le code transgé une seule fois car il est censé. Si vous souhaitez exécuter le code plus souvent, utilisez Window.setInterval ().


2 commentaires

Je pense que c'est juste le i ++ .


@Thilo vrai. Bien que cela soit quelque chose que la console d'erreur aurait dû montrer.



-2
votes

il pourrait être fenêtre.settimeout ("x", 100)

Edit: Corrigez la réponse à cet fenêtre.settimeout (x, 100) .

PS: C'est ce qui se passe si vous travaillez simplement avec un IDES.


3 commentaires

Votre capitalisation de Settimeout n'est pas correcte, et "x" ne fera rien.


@patrick, vous avez raison sur les deux. Cela aurait dû être cette fenêtre.Settimeout (x, 100).


il doit être x () de sorte qu'il fait référence à une fonction



31
votes

cherchez-vous seinterval () code> au lieu de Settimeout () code> par hasard?

t = window.setInterval("x()",100);


3 commentaires

Mais cette tâche peut-elle toujours être réalisée par SetTimeOut ()? J'ai essayé une déclaration de placement dans la fonction x () et il n'a pas fonctionné.


@Shubham: Je crois que, mais je ne sais pas comment. Je sais que tu es une étape là-bas.


@Shubham oui vous pouvez le faire avec SettimeOut (), j'ai ajouté une réponse ci-dessous



0
votes

ne devrait-il pas être i ++ à la fin de votre boucle?


0 commentaires

0
votes

Il existe également une erreur de syntaxe.

pour (i = 0; i <= document.getelementsbytagname ('img'). longueur; i ++ )


0 commentaires

0
votes

Vous devez mettre le ... xxx pré>

à l'intérieur de la fonction x () des crochets {} et cela fonctionne avec Settimeout () P>

function x() {
    for(i=0;i<=document.getElementsByTagName('img').length;i++)
        document.getElementsByTagName('img')[i].width+=1;

t = window.setTimeout("x()",100);
};

    x();

void(0);


0 commentaires