3

わかりましたので、ボタンのクリックに対処するために、addEventListener 関数を使用してこのページを作成しようとしました。うまくいきませんでした。リスナーに必要な基本要素以外をすべて削除して絞り込み、次のものが残りました。

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function init(){
    document.getElementById("test").addEventListener("mousedown", function(){
        alert("Test successful");
    });
}
body.onload = init();
</script>
</head>
<body>
<button id="test">Click</button>
</body>
</html>

どちらも機能しなかったため、問題は上記の構文にあることがわかりました。気をつけてください、私が取り除いbody.onload = init();て代わりにonload="init()"body タグに入れたとき、それはうまくいきました:O 問題は、インラインにしたくないということです。助言がありますか?

注: この質問は、JS にバグがあることに関するものではなく、タイトルがそのように示唆している場合でも、構文が間違っている可能性があるため、JS を動作させることができないことに関するものであることに注意してください。必要に応じて、自由に名前を変更してください。

4

4 に答える 4

22

まず、 を通じて body 要素にアクセスする必要がありますdocument.body。ただし、onloadで定義されてwindowいるため、実際には次のものが必要です。

window.onload = init();

ただし、それではinit()メソッドが実行され、戻り値が に格納されwindow.onloadます。明らかに、それはあなたが望むものではありません: 関数をハンドラーinitとして機能させたいのです。onloadしたがって、次のように記述する必要があります。

window.onload = init;

そのためにも使用することをお勧めしaddEventListenerますが:

window.addEventListener("load", init);
于 2012-05-31T19:05:56.027 に答える
4

body.onload = init();

本文を参照する方法ではなく、代わりにウィンドウを使用してください-そしてそこでメソッドを呼び出さず、それを参照してください(括弧なしで)

window.onload = init;

たとえそれが偽であっても、3番目の引数を渡します-

function init(){
     document.getElementById("test").addEventListener("mousedown", function(){
         alert("Test successful");
     },false);
}

また、バージョン#9より前のIEはaddEventListenerをサポートしていないことに注意してください。

于 2012-05-31T19:08:28.093 に答える
1

が定義されていないために発生bodyします。正しいのは document.body です。また、タグがタグheadの前にレンダリングされるため、document.body がまだ定義されていない可能性があります。このコードを試してください:bodywindowdocument

function init(){
    document.getElementById("test").addEventListener("mousedown", function(){
        alert("Test successful");
    });
}
document.addEventListener('load',init);//Or also, window.addEventListener
于 2012-05-31T19:06:47.053 に答える