0

好的,这里的人是我惊人的反重力图书馆。我试图将它定义为一个对象文字,嗯,我读到了所有酷孩子正在做的事情,以便封装他们的库。基本测试表明它工作正常,但我似乎无法从我的对象内部看到 document.body。

应该发生的是,当我单击“它正在工作”页面时应该发出警报。相反,我得到一个 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();
4

3 回答 3

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;
于 2009-01-17T05:26:58.547 回答
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'),但仍然抛出“error:document.body is null”注释掉的行具有相同的结果......

于 2009-01-17T06:07:46.497 回答
0

好吧,人们,我是个傻瓜,但无论如何你们都非常乐于助人。

/real/ 问题,与任何事情无关,并揭示了 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 之间的所有空间都 / 根本没有 / 在其中 - 包括一个 body 元素,我猜?您必须单击实际文本才能触发 document.body.onclick...

奇怪的是,(这是揭示的“奇怪的怪癖”)如果你给 body 标签一个 onclick="foo()",那么当你点击页面上的任何地方时会触发 foo(),包括不存在的 body 区域。我不知道为什么会这样,但这实际上是问题所在。感谢您的帮助,您还指出了其他一些好的技术。

于 2009-01-17T16:41:02.243 回答