-1

JS は初めてで、本から書いた例をいじっているだけです。以下のコードでは、関数が実行されないのはなぜですか? 私はそれらを呼び出していますが、構文は正しいです。document.addEventListener ("DOMContentLoaded" , init , false) ; を配置すると、その場合、init() 関数は実行されますが、test() 関数は実行されません。

また、document.addEventListener を正常に配置する場所と、init 関数に関して正確に何を意味するかについても混乱しています。init() 関数を常に最初に呼び出す必要がありますか? 通常、init() 関数には何が入りますか?

前もって感謝します。以下のコード;

function init() {
    var panel = document.getElementById("panel");
    panel.innerHTML = "Hello World";
}


function test() {
    var panel = document.getElementById("panel");
    panel.innerHTML = "See ya";

}
init();
test();
4

2 に答える 2

3

DOM 要素がロードされる前に関数を実行している可能性があります。ページは上から下に読み取られます。HTML が読み込まれる前に関数が実行された場合、要素は存在しません。

多くの開発者は、これを避けるためにスクリプトを本文の最後の要素にしています。

または、このように onload ハンドラを使用します

window.onload = function () {
  init();
  test();
}

関数はハンドラーで定義する必要はありません

編集。同じ要素にデータを書き込んでいることも事実であるため、2 番目の関数だけが結果を確認できます。別の要素に書き込むことも、1 つの回答が示唆するようにデータを追加することもできます。

于 2013-10-15T16:51:03.060 に答える
2

メソッドが呼び出されているように聞こえますが、DOM の読み込みが完了する前に呼び出されるため、エラーが発生しています。通常の状況では、このようなスクリプトはブラウザがアクセスするとすぐに実行されるため、DOM がロードされる前にこれが発生した場合 (通常はそうです)、document.getElementById() の呼び出しは失敗します。ロードされていません。

document.addEventListener ("DOMContentLoaded" , init , false); への呼び出しに近づいています。- これは、DOM がロードされたときに init を呼び出すようにブラウザーに指示します。ただし、この場合は init のみを呼び出しているため、test() は呼び出されません。

init(); へのインライン呼び出しを削除することをお勧めします。および test(); に、次を追加します。

function onLoaded(){
    init();
    test();
}

次に、イベント リスナーから onLoaded を呼び出します。

document.addEventListener ("DOMContentLoaded" , onLoaded , false); 
于 2013-10-15T16:52:47.183 に答える