0

私はJavaScriptが初めてなので、ご容赦ください...

HTML にリンクされた外部 JavaScript ドキュメントがあります (HTML ドキュメントの head 内で呼び出されます)。

私の JavaScript ドキュメントでは、window.onloadイベントで 2 つの関数を呼び出します。

window.onload = function() {
    selected_state();
    viewer();
};

function selected_state() {
    var titleAr = document.getElementsByTagName("title");
    var aAr = document.getElementsByTagName("a");
    // Take the first element of title array. Check if it matches
    // the first element of link array.
    for (i = 0; i <= titleAr.length; i++) {
        for (l = 0; l <= aAr.length; l++) {
            if (titleAr[i].innerHTML === aAr[l].innerHTML) {
                aAr[l].style.color = "#C33";
                break;
            }
        }
    }
};

function viewer() {
    var imgAr = document.getElementsByTagName("img");
    for (var i = 0; i < imgAr.length; i++) {
        imgAr[i].onmouseover = function() {
            this.style.border = "1px solid #CCC";
        }
    }
};​

最初の関数は問題なく実行されますが、2 番目の関数は実行されません。それらを切り替えるviewer()と、最初に切り替えられ、selected_state()実行されません。私は問題がおそらく非常に単純な論理的なものであることを知っています... テイカーはいますか?

4

2 に答える 2

1

selected_state外側のループの最初の実行で内側のループが終了すると、壊れているように見えます。ループ条件が正しくありません (「範囲外のインデックス」などをスローしている必要があります)

配列はゼロベースのインデックスを使用します:

変化する:

for (i=0; i <= titleAr.length; i++) {
    for (l=0; l <= aAr.length; l++) {

に:

for (i=0; i < titleAr.length; i++) {
    for (l=0; l < aAr.length; l++) {
于 2012-06-27T01:14:02.380 に答える
0

唯一の説明は、問題なく実行されたと思われることを実行した後に、両方の関数が例外をスローすることです。スローする例外を除いて、最初の例外が最初に実行され、次に 2 番目の例外が実行されます。あなたが見逃している基本的な論理エラーはありません。しかし、最初の関数が例外をスローすると、次の例外キャッチ フレームに制御が移されます。これは ( を介してフレームを定義していない場合try...catch)、コードの外側になります。

あなたの最善の策は、まともなデバッガーを使用して何が起こっているのかを調べることです。すべての主要なブラウザーには、まともなデバッガーが組み込まれています。IE と Chrome では、F12 を押してデバッガーを開きます。他のブラウザでは、メニューを見てください。デバッガーには、エラーを報告する「コンソール」があります。ブレークポイントを設定して、ステートメントごとにコードを確認することもできます。


(コードを投稿したので編集してください。)

のコードはThe Horror of Implicit Globals のselected_state餌食になることに注意してください。とを宣言する必要があります。ilvar

于 2012-06-27T01:11:23.563 に答える