次のJavaScriptコードでrefButton
がnull
を取得するのはなぜですか?
<html>
<head>
<title></title>
<script type="text/javascript">
var refButton = document.getElementById("btnButton");
refButton.onclick = function() {
alert('I am clicked!');
};
</script>
</head>
<body>
<form id="form1">
<div>
<input id="btnButton" type="button" value="Click me"/>
</div>
</form>
</body>
</html>
関数を呼び出している時点では、ページの残りの部分はレンダリングされていないため、その時点では要素は存在していません。 window.onload
で関数を呼び出してみてください。このようなもの:
<html>
<head>
<title></title>
<script type="text/javascript">
window.onload = function(){
var refButton = document.getElementById("btnButton");
refButton.onclick = function() {
alert('I am clicked!');
}
};
</script>
</head>
<body>
<form id="form1">
<div>
<input id="btnButton" type="button" value="Click me"/>
</div>
</form>
</body>
</html>
JavaScriptを置く必要がありますbodyタグの最後に
まだDOMにないため、見つかりません!
次のようにonloadイベントハンドラでラップすることもできます。
window.onload = function() {
var refButton = document.getElementById( 'btnButton' );
refButton.onclick = function() {
alert( 'I am clicked!' );
}
}
スクリプトが実行されるとき、ブラウザはまだ<body>
を解析していないので、指定されたIDを持つ要素があることを知らないためです。
代わりにこれを試してください:
<html>
<head>
<title></title>
<script type="text/javascript">
window.onload = (function () {
var refButton = document.getElementById("btnButton");
refButton.onclick = function() {
alert('Dhoor shala!');
};
});
</script>
</head>
<body>
<form id="form1">
<div>
<input id="btnButton" type="button" value="Click me"/>
</div>
</form>
</body>
</html>
window.onload = ...
の代わりにaddEventListener
を使用して、ドキュメント全体が解析された後にのみその関数を実行することもできます。