JavaScript getElementByID() 不起作用

IT技术 javascript getelementbyid
2021-02-05 15:52:50

为什么refButtonnull出现在下面的 JavaScript 代码中?

<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>
3个回答

在您调用函数时,页面的其余部分尚未呈现,因此该元素此时不存在。尝试调用您的函数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>
或者考虑使用 Prototype、JQuery 或其他一些包来处理 DOM 就绪事件。
2021-03-22 15:52:50
@Paul - 好点。@JMSA DOM 就绪事件实际上在下载所有图像之前和在下载所有脚本和页面之后触发。因此,DOM 就绪事件在 window.onload 事件之前触发。:)
2021-03-27 15:52:50
我认为他不需要为 DOM 就绪事件导入整个库。;)
2021-04-05 15:52:50

您需要将 JavaScript放在 body 标签的末尾。

它没有找到它,因为它还不在 DOM 中!

您还可以将其包装在 onload 事件处理程序中,如下所示:

window.onload = function() {
var refButton = document.getElementById( 'btnButton' );
refButton.onclick = function() {
   alert( 'I am clicked!' );
}
}
标准做法是仅在构建 DOM 树之后运行脚本。
2021-03-15 15:52:50
@JMSA - 不一定。这完全取决于您需要它做什么,以及页面在整个渲染过程中的进度。附加到 window.onload 事件将确保页面中包含的所有文件(CSS、JS、图像)都已下载。如果您知道您只需要在脚本标签上方呈现的 HTML 肯定有效,但可能更好地附加到事件并了解这些事件的含义。
2021-03-17 15:52:50
标准做法是从页面加载时开始执行。
2021-03-19 15:52:50
这是标准做法还是仅在这种情况下?
2021-03-30 15:52:50
不,只有当页面完全加载时,树才准备就绪。由于<script>标签是文档的一部分,您的建议也不够。我会看一下 JavaScript 包,或者如果这对你的实现来说太过分了,看看这个:javascriptkit.com/dhtmltutors/domready.shtml
2021-03-31 15:52:50

因为脚本执行的时候浏览器还没有解析<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>

请注意,您也可以使用addEventListener而不是window.onload = ...使该函数仅在整个文档被解析后才执行。

window.onload 在整个文档被解析并下载所有文件之前不会触发
2021-04-08 15:52:50