javascript - 对象文字 + document.body.onclick 没有按照我的预期进行

标签 javascript object-literal

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

应该发生的是,当我单击页面“正在运行”时应该发出警报。相反,我收到了 document.body=null 错误。是什么赋予了?我的 body 在哪里?为什么我不能为其设置鼠标事件?我整个周五都浪费在这上面了!嘎!

antigrav={
activate:function(){
    // turn on antigrav
    document.body.onmousedown = antigrav.startPan();
},

startPan:function(event){
    alert('it is working!');
},

}

document.onload=antigrav.activate();

最佳答案

你可能想做

document.onload=antigrav.activate;

使用括号,您将 document.onload 设置为运行 antigrav.activate() 的结果,而不是表明您希望 antigrav.activate 作为文档运行.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;

关于javascript - 对象文字 + document.body.onclick 没有按照我的预期进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/452825/

相关文章:

javascript - 我如何优化 qTip?

javascript - Javascript 对象文字表示法的意外行为

javascript - 对象字面量/初始化器中的自引用

JavaScript 对象文字长度 === 未定义?

javascript - 自动将动态添加的对象属性(函数)包装在包装函数中

javascript - $.when.apply 应用于 Promise 数组

javascript - 汉堡菜单下拉低宽度

javascript - 如何将具有数组键的对象动态添加到对象文字?

javascript - 连接 $http.post 请求

javascript - 翻转效果,显示另一个图像