2

リンクがいくつかあり、フォーカスを1つずつ自動的に渡したいです。以下のコードを使用しています。フォーカスを通過しても問題なく動作しますが、1回だけです。初めてフォーカスが通過すると、リンクの色が変わり、次のリンクに移動します。前のものは再び黒くなり、次のものは赤く塗られます。問題ない。しかし、到達しても最終リンクは再起動しません。

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()で呼び出されます。

なぜそれが機能しないのか、何か考えはありますか?

4

2 に答える 2

2

次のように変更ifします。

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

実例: http:
//jsfiddle.net/nivas/Nn62Q/
(ボタンをクリックしOrigてコードの動作を確認し、ボタンをクリックして新しいコードの動作を確認します。エラーを表示するためNewにを追加しました)try...catch

説明: 5つのタグ
があるとしましょう。aあなたはi = 0いつi > 6(すなわち6)を作ります。ただし、にiなると5letras[i].style.color = "red";関数の先頭で失敗し、例外がスローされます。流れはここで止まるので、if (i > letras.length)決して到達しません。

于 2012-05-18T19:00:48.110 に答える
0

あなたの状態は

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

代わりは?

i配列の長さに等しくなったら、リセットします。

于 2012-05-18T18:57:19.500 に答える