2009-11-12 8 views
2

Je viens de passer du temps à essayer de comprendre pourquoi mon Javascript for() ne fonctionne pas dans un bloc Drupal, j'ai l'impression d'avoir vérifié la syntaxe - une idée de pourquoi cela ne fonctionne pas? !Javascript for() boucle dans Drupal ne fonctionne pas?

$(document).ready(function() { 
var i=0; 
while (i<=5) 
    { 
alert(i); 
    i++; 
} 
}); 

Cela ne fait rien - et aussi si je mets quelque chose comme ça in- ne fonctionne pas non plus:

for (var i=0; i<31; i++){ 
alert(i); 
} 

Merci!

+2

BTW - vous ne devriez pas utiliser $ (document) .ready directement dans Drupal, utilisez plutôt Drupal.behaviors. Vérifiez les liens dans cette réponse pour savoir comment et pourquoi: http://stackoverflow.com/questions/1717373/add-a-function-to-onload-in-drupal/1717490#1717490 –

+0

Je serais d'accord avec Henrik - l'apparence du code à droite, peut-être que jQuery n'est pas lancé correctement - essayez une alerte hors de la boucle, voir si vous avez une réponse – dpmguise

Répondre

3

Aucune des alertes ne se produira tant que le thread n'aura pas été exécuté. À ce moment-là, j'ai dépassé votre limite. Ceci est une question très fréquemment posée. Vous devez en savoir plus sur les fermetures en JavaScript.

Voici un bon aperçu. Il y a aussi beaucoup de réponses à cette question dans StackOverflow.

http://james.padolsey.com/javascript/closures-in-javascript/

de cet article, ce code:

for (var i = 0; i < 100; ++i) { 
    myElements[i].onclick = (function(n) { 
     return function() { 
      alert('You clicked on: ' + n); 
     }; 
    })(i); 
} 

est similaire à ce que vous voulez.

+0

Merci. Ça a du sens. – Bloopy

+0

Ne pas alerter bloquer l'exécution? Je ne pense pas que cela ait quelque chose à voir avec les fermetures - le code dans la question n'attache pas les gestionnaires d'événements dans une boucle. –

+0

Hmm. Vous pouvez avoir raison. Je vais supprimer et réfléchir à ce sujet. l'alerte devrait bloquer. – Nosredna

Questions connexes