addEventListener()不起作用

时间:2012-05-31 19:00:37

标签: javascript addeventlistener

好的,所以我尝试使用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 个答案:

答案 0 :(得分:19)

首先,您应该通过document.body访问body元素。但是,onload定义了window,因此您确实需要:

window.onload = init();

但是,这将执行init()方法并将返回值存储在window.onload中。显然,这不是你想要的:你希望init函数充当onload处理程序。因此,你应该写:

window.onload = init;

虽然我建议也使用addEventListener

window.addEventListener("load", init);

答案 1 :(得分:4)

body.onload = init();

不是引用身体的方式,而是使用窗口代替 - 并且不要在那里调用方法,引用它(没有括号)

<强>的window.onload = init;方法

传递第三个参数,即使它是假的 -

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

请注意,版本#9之前的IE不支持addEventListener。

答案 2 :(得分: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

答案 3 :(得分:0)

<script>
        window.addEventListener('load', () => {
            document.getElementById('test').addEventListener("mousedown", (e) => {
                alert("Test successful");
            });
        })
</script>