lol
当在它之外定义时,你的函数不起作用的原因是,当 JavaScript 首次运行时, DOM尚未加载。因此,getElementById
将返回null
(参见 MDN)。
您已经找到了最明显的解决方案:通过getElementById
在函数内部调用,DOM 将在函数被调用时被加载并准备好,并且会像您期望的那样找到元素。
还有一些其他的解决方案。一种是等到整个文档加载完毕,如下所示:
<script type="text/javascript">
var lolz;
function onload() {
lolz = document.getElementById('lolz');
}
function kk(){
alert(lolz.value);
}
</script>
<body onload="onload();">
<input type="text" name="enter" class="enter" value="" id="lolz"/>
<input type="button" value="click" onclick="kk();"/>
</body>
注意标签的onload
属性。(附带说明:标签的属性已弃用。不要使用它。)<body>
language
<script>
但是,有一个问题onload
:它一直等到所有内容(包括图像等)都加载完毕。
另一种选择是等到 DOM 准备好(通常比onload
. 这可以使用“普通”JavaScript 来完成,但使用jQuery之类的 DOM 库要容易得多。
例如:
<script type="text/javascript">
$(document).ready(function() {
var lolz = $('#lolz');
var kk = $('#kk');
kk.click(function() {
alert(lolz.val());
});
});
</script>
<body>
<input type="text" name="enter" class="enter" value="" id="lolz"/>
<input type="button" value="click" id="kk" />
</body>
jQuery 的.ready()将函数作为参数。该函数将在 DOM 准备好后立即运行。第二个示例还使用.click()来绑定 kk 的onclick
处理程序,而不是在 HTML 中内联。