2014-01-22 24 views
1

我最近嘗試重新使用(working!)javascript函數並檢測到一個奇怪的行爲:在for循環中的某個if語句之後,函數停止。我沒有看到任何理由。JavaScript函數在某個if語句後停止

如果將實際條件更改爲「1 == 1」,則一切正常。但隨着代碼如上,我得到第一個警報('我們去'),但我從來沒有得到第二個警報。所以,這個問題不能連接到循環(無盡的或類似的東西)。但除此之外,我非常困惑和無奈。 (測試與Firefox 26和Internet Explorer 11)

<!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <script type="text/javascript"> 
      function my_function(number_of_divs) 
      { 
      for (var k = 0; k <= number_of_divs; k++) 
       { 
       var index = k; 
       if (document.getElementsByName("text_levels")[index].style.display == 'block') 
       { 
        alert('Here we go'); 
       } 
       } 
       alert('This is never shown'); 
      } 
     </script> 
    </head> 

    <body> 
     <a href="javascript:void" onclick="my_function(1)">Click</a> 
     <div name="text_levels" style="display:block">The content of a div element</div> 
    </body> 
</html> 
+0

難道不應該是「=== 「? – duffymo

+0

你有沒有試過用像firebug這樣的調試器來完成它? – ElGavilan

回答

1

錯誤控制檯告訴你的問題是什麼:

Uncaught TypeError: Cannot read property 'style' of undefined 

你需要你的if語句內執行範圍檢查:

var index = k, 
    levels = document.getElementsByName("text_levels"), 
    levelLength = levels.length; 

    if(index < levels.length && levels[index].style.display == 'block') 
    { 
     alert('Here we go'); 
    } 
3

的問題是,你只能有一個特別的名字元素和數組索引開始與零所以你停在不到條件。

for (var k = 0; k < number_of_divs; k++) 

,因爲當它試圖用index=1調用下面的語句拋出錯誤:

document.getElementsByName("text_levels")[index].style.display == 'block' 

Here is working Demo

1

這是因爲該行的

k <= number_of_divs 

它應該有已被

k < number_of_divs 

由於只有一個text_levels,它將讓循環(在索引1元件),它是不存在訪問第二元件。所以,它會因錯誤而失敗。