Javascript 为什么一个div和body没有';你没有得到mousemove事件吗?

Javascript 为什么一个div和body没有';你没有得到mousemove事件吗?,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我正在中注册mousemove处理程序 正如在Chrome和Firefox上尝试的那样 守则的一部分是: $("body").on("mousemove", function () { console.log("$('body') mousemove listener invoked"); }); $("#foo").on("mousemove", function () { console.log("$('#foo') mousemove listener invoked")

我正在中注册
mousemove
处理程序

正如在Chrome和Firefox上尝试的那样

守则的一部分是:

$("body").on("mousemove", function () {
    console.log("$('body') mousemove listener invoked");
});

$("#foo").on("mousemove", function () {
    console.log("$('#foo') mousemove listener invoked");
});

但由于某些原因,它们从未被调用,而是调用了
mousemove
html
document
window
处理程序。我遗漏了什么吗?

这是因为您将脚本包装在head和语句中

document.getElementsByTagName("body")[0]
返回未定义且脚本中断,因此除此之外不会执行任何事件处理程序附件代码

将它们包装在window.onload或document ready中,即可正常工作

由于脚本在执行时被包装在头中,文档尚未加载,因此无法找到要将处理程序绑定到的元素。如果找不到元素,jquery将不会返回
undefined
,因此它不会破坏脚本,如果找不到元素,原生js元素的as document函数将返回undefined。唯一不需要在
document.ready
中或DOM中元素之后出现的东西是
document
,它甚至在文档准备好之前就可用


小提琴拉得很好。但始终将Js代码包含在document.onready函数中

$(function(){
< your Js code here >
});
$(函数(){
<你的Js代码在这里>
});

这是因为代码是在浏览器呈现元素之前读取的,因此在读取代码时,它无法绑定到甚至不存在的任何内容。因此,您的代码可能无法工作。

通过将您的
控制台.log
语句更改为
警报()
窗口变疯,它们都可以工作。这不是你的问题。

*即使在小提琴中,也只有窗口和文档绑定在工作。。。很好的解释。一个次要的问题是,我没有看到Chrome的开发者工具中报告的错误,即对于
未定义的
,MouseMove
没有任何属性。如果,在加载页面之后,我故意键入
document.getElementsByTagName(“foobarwahlah”)[0].onmousemove=function(){}
然后它会说
TypeError:无法设置未定义的属性“onmousemove”
我看到
Uncaught TypeError:无法设置未定义的属性“onmousemove”
但是您的问题可能是时间。如果将它们放在ready下或html中的元素之后(正文末尾)。这对你来说应该很好。@JeremyL,正如我说的,这是一个关于你的脚本在哪里的时间问题
document.getElementsByTagName(“body”)[0]
在头中而不是在window.onload或document.ready中包装时也会抛出错误,前提是提供了时间。这就是理论,而且我在实践中大多是这样看的。
$(function(){
< your Js code here >
});