2009-11-12 93 views
2

我剛剛花了很長時間試圖找出爲什麼我的JavaScript for()循環在Drupal塊中不起作用,我覺得我已經檢查了語法 - 任何想法爲什麼這不起作用? !JavaScript for()在Drupal中循環不起作用?

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

這並不做任何事情 - 而且如果我把這樣的事情在 - 無法正常工作或:

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

謝謝!

+2

順便說一句 - 你不應該直接在Drupal中使用$(document).ready,而應該使用Drupal.behaviors。檢查這個答案中的鏈接是如何和爲什麼:http://stackoverflow.com/questions/1717373/add-a-function-to-onload-in-drupal/1717490#1717490 – 2009-11-12 19:30:49

+0

我同意亨裏克 - 代碼看起來對,也許jQuery沒有正確啓動 - 試試一個循環內的警報,看看你是否得到任何迴應 – dpmguise 2010-11-04 06:14:27

回答

3

直到線程完成執行後,纔會發生警報。那時候,我已經超過了你的極限。這是一個非常常見的問題。您需要了解JavaScript中的閉包。

這裏有一個很好的概述。在StackOverflow中也有很多這個問題的答案。

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

從這篇文章中,這樣的代碼:

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

這類似於你想要什麼。

+0

謝謝。這就說得通了。 – Bloopy 2009-11-12 19:28:58

+0

不警告阻止執行?我認爲這與閉包沒有任何關係 - 問題中的代碼沒有在循環中附加事件處理程序。 – 2009-11-12 19:35:03

+0

嗯。也許你是對的。我要刪除並思考這個問題。警報應該阻止。 – Nosredna 2009-11-12 19:45:19