2012-05-18 58 views
2

我有一些鏈接,並希望自動逐個傳遞焦點。 我使用下面的代碼。工作很好地傳遞焦點,但只有一次。 焦點第一次通過時,鏈接會更改顏色,然後轉到下一個。之前的一個變黑了,下一個變成紅色。沒問題。 但是當它到達最後的鏈接不會重新啓動。在javascript中迭代焦點組件

var i = 0; 
var letras = document.getElementsByTagName("a"); 

function pasaLink() { 
    if (i == 0) { 
     letras[letras.length-1].style.color = "black"; 
    } else { 
     letras[i-1].style.color = "black"; 
    } 
    letras[i].style.color = "red"; 
    letras[i].focus(); 
    i++; 
    if (i > letras.length) { 
     i= 0; 
    } 
    setTimeout("pasaLink()",2000); 
} 

隨着最後ifi=0;我想,當到達最後一個元素,回到最初的索引,然後重新啓動迭代鏈接的整個集合在letras。 該函數在body.onload()中調用。

任何想法爲什麼它不工作?

回答

2

更改if到:

if (i >= letras.length) { 
    i= 0;  
} 

工作例如:
http://jsfiddle.net/nivas/Nn62Q/
(點擊Orig按鈕可以查看代碼的行爲和New按鈕來查看新的行爲。我添加了一個try...catch以顯示錯誤)

說明:
讓我們假設有五個a標籤。 當i > 6(即6)時,您製作i = 0。但是當i變爲5,letras[i].style.color = "red";在函數的開頭失敗並且異常將引發異常。流程在此停止,因此if (i > letras.length)將永遠不會到達。

+0

非常愚蠢的錯誤,更愚蠢的我沒有注意到它。謝謝 :-) – Fisu

1

應該不是你的條件是

if (i == letras.length) { 
    i= 0; 
} 

呢?

一旦i等於你的數組的長度,重置。

+1

存在問題。由於它試圖對一個不存在的元素進行操作(訪問一個不存在的元素的屬性),所以在這一點上Javascript會崩潰,並且在那之後它不會重新安排自己。 –