当我点击页面“它正在工作”应该提醒时应该发生什么。相反,我得到一个document.body = null错误。是什么赋予了?我的身体在哪里?为什么我不能为它设置鼠标事件?我整个星期五都浪费了这个!尔加!
antigrav={
activate:function(){
// turn on antigrav
document.body.onmousedown = antigrav.startPan();
},
startPan:function(event){
alert('it is working!');
},
}
document.onload=antigrav.activate();
答案 0 :(得分:4)
您可能想要
document.onload=antigrav.activate;
使用括号,您将document.onload
设置为运行antigrav.activate()的结果,而不是指示您希望antigrav.activate作为document.onload处理程序运行。因此,在加载文档之前,运行activate()以进行赋值,因此document.body尚未定义。
你想为onmousedown处理程序赋值做同样的事情:
document.body.onmousedown = antigrav.startPan;
试试这个,我也不得不切换到window.onload ...
另外,请注意对象文字定义中的尾随逗号。 Firefox对他们没问题,但IE窒息。所以,总而言之:
var antigrav={
activate:function(){
// turn on antigrav
document.body.onmousedown = antigrav.startPan;
},
startPan:function(event){
alert('it is working!');
}
};
window.onload=antigrav.activate;
答案 1 :(得分:0)
这里是当前状态:
var antigrav={
activate:function(){
// turn on antigrav
alert('started');
document.body.onmouseup = antigrav.startPan;
// make flash shield
},
startPan:function(event){
alert('dude, you are panning!');
},
}
antigrav.activate();
//document.onload=window.antigrav.startPan;
它达到“alert('started'),但仍然抛出”错误:document.body为null“ 注释掉的行有相同的结果......
答案 2 :(得分:0)
好的,伙计们,我是个傻瓜,但无论如何你都非常乐于助人。
> / real / problem,与任何事情无关,并揭示了一个奇怪的body.onclick行为的怪癖:在我/ HTML /中我试图设置一个大文档来测试我的点击次数:
<html>
<script src="antigrav.js"></script>
<body onload='test()'>
<!--<body onload="antigrav.activate();" >-->
yo, fool, this is the body!
<div style="position:absolute; top:2000px; left:2000px;">
it is mad wide and tall!
</div>
</body>
</html>
为了伸展身体,我在2000px,2000px处放置了一个div。滚动条在那里,身体必须是巨大的,对吧?实际上,div之间的所有空间都有/什么都没有 - 包括身体元素,我猜?您必须单击实际文本才能触发document.body.onclick ...
奇怪的是,(这是显露出来的“奇怪的怪癖”)如果你给body标签一个onclick =“foo()”,当你点击页面上的任何地方时都会触发foo(),包括不存在的身体区域。我不知道为什么会这样,但那确实是问题所在。感谢您的帮助,您也指出了其他一些好技术。