2013-07-16 54 views
-1

這個代碼,不會做超過一次,做一段時間,但不

for (a = 0; a < 5;a++){ 
    var namex = document.getElementsByClassName("tooltip_sticky")[a].getAttribute("name",2); 
    var n=namex.split("'"); 
    i = 0; 
    while(i < 30) { 
    var achou = n[i].indexOf("mission=1"); 
     if (achou == -1) { 
     alert(achou); 
     i++; 
     } 
     else { 
      alert("Lol"); 
      i++; 
     } 
    } 
} 

它必須首先運行爲0,比做,而30次,回覆到,設置到1,同時做更多30,回到一個,設置爲2,同時做30次...

但它做的第30次,並停止,爲什麼它不回到FOR?

+0

是。我的猜測是,你沒有'tooltip_sticky'類的多個元素,所以當你嘗試在不存在的元素上使用'getAttribute'時,你在第二次循環迭代時會出錯。您的瀏覽器內置了一個調試器,我建議用它來單步執行代碼並觀察發生的情況。 –

+0

看看js控制檯,看看是否有錯誤發生 – fcalderan

+0

注意:據我所知,['getAttribute'只接受一個參數,而不是兩個](http://www.w3.org/TR/DOM -Level -3-核/ core.html#ID-666EE0F9)。 –

回答

2

根本這裏的東西是有原因只有兩個循環可能無法繼續:您還沒有表現出

  1. 東西是改變a值,或

  2. 錯誤是被拋出(這更可能)。

在後一種情況下,錯誤可以在瀏覽器的JavaScript控制檯中找到。

在任何一種情況下,使用內置在瀏覽器中的調試器單步執行代碼可幫助您找出錯誤的位置。

從評論中,它聽起來像var n=namex.split("'");不一定導致具有至少30個元素的數組。所以,你需要改變你的內循環:

var n=namex.split("'"); 
i = 0; 
while(i < n.length) { // <=== Change is here 

...否則,n[i]可能undefined,並試圖調用它的方法將拋出一個錯誤。


FWIW,你while循環也想成爲for循環:

for (i = 0; i < n.length; ++i) { 
    var achou = n[i].indexOf("mission=1"); 
    if (achou == -1) { 
     alert(achou); 
    } 
    else { 
     alert("Lol"); 
    } 
} 

您還沒有表現出任何聲明代碼中的ai。我假設你宣佈他們的地方;如果不是的話,你會墮入The Horror of Implicit Globals


終於:據我所知,getAttribute only accepts one argument, not two

+0

在較老的IE中有一個屬性套管標記系統。 「'2完全按照它在腳本或源文檔中設置的那樣返回值。」(引自1999年以前的Office文檔。) – Teemu

+0

@Teemu:哇。 :-) –

相關問題