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 中如何存在错误,即使标题可能暗示如此,而是关于我如何无法让它工作,因为我可能有语法错误。如果您愿意,请随时重命名。

4

4 回答 4

22

首先,您应该通过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();

不是引用 body 的方式,而是使用 window - 并且不要在那里调用该方法,引用它(不带括号)

窗口.onload=初始化;

传递第三个参数,即使它是错误的——

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。另外,可能 document.body 尚未定义,因为head标签是在标签之前呈现的body,所以最好检查何时加载windowdocument加载。试试这个代码:

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 回答
0
<script>
        window.addEventListener('load', () => {
            document.getElementById('test').addEventListener("mousedown", (e) => {
                alert("Test successful");
            });
        })
</script>
于 2021-07-31T12:13:57.483 回答