2012-05-31 33 views
3

好的,所以我试图用addEventListener函数来制作这个页面,以解决点击按钮的问题;它没有工作。我把范围缩小,删除一切,但需要监听的基本要素,并留下了以下AM: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()"放入身体标记时,它确实有效:问题是,我不想让它内联。有什么建议么?

注意:请记住,这个问题是而不是关于如何有JS中的错误,即使标题可能会这样建议,它是关于如何我无法让它工作,因为我已经可能是语法错误。如果您愿意,请随时重新命名。

回答

18

首先,您应该通过document.body访问正文元素。然而,onload定义上window,所以你的实际需要:

window.onload = init(); 

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

window.onload = init; 

虽然我推荐使用addEventListener对于还有:

window.addEventListener("load", init); 
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 
4

body.onload = init();

不的方式来指代体,使用窗口instead- 和不调用方法有,引用它(没有括号)

的window.onload = init;方法

传递的第三个参数,哪怕是假

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

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

相关问题