我正在
注册mousemove
个处理程序
在Chrome和Firefox上试用了
部分代码是:
$("body").on("mousemove", function () {
console.log("$('body') mousemove listener invoked");
});
$("#foo").on("mousemove", function () {
console.log("$('#foo') mousemove listener invoked");
});
但出于某种原因,他们永远不会被调用,但会调用html
的{{1}},document
和window
处理程序。有什么我想念的吗?
答案 0 :(得分:3)
这是因为你有脚本和声明包装的脚本。
document.getElementsByTagName("body")[0]
返回undefined并且您的脚本会中断,因此除了执行之外没有任何事件处理程序附件代码。
将它们包装在window.onload或文档就绪,它将正常工作。
<强> Demo 强>
由于脚本在执行时被包裹在头部,因此文档尚未加载,并且无法找到要将处理程序绑定到的元素。如果找不到元素,jquery将不会返回undefined
,因此它不会破坏脚本,因为如果找不到元素,本机js元素的文档函数将返回undefined。 只有不需要在document.ready
中或在DOM中的元素之后出现的内容document
即使在文档准备好之前也可用。
$(function () { //document.ready
$(window).on("mousemove", function () {
console.log("window mousemove listener invoked");
});
$(document).on("mousemove", function () {
console.log("document mousemove listener invoked");
});
$(document.documentElement).on("mousemove", function () {
console.log("document.documentElement mousemove listener invoked");
});
$(document.body).on("mousemove", function () {
console.log("document.body mousemove listener invoked");
});
$("body").on("mousemove", function () {
console.log("$('body') mousemove listener invoked");
});
$("#foo").on("mousemove", function () {
console.log("$('#foo') mousemove listener invoked");
});
$("#foo").mousemove(function () {
console.log("$('#foo') mousemove listener invoked");
});
document.getElementsByTagName("body")[0].onmousemove = function () {
console.log("DOM level 0 body mousemove listener invoked");
};
document.getElementById("foo").onmousemove = function () {
console.log("DOM level 0 foo mousemove listener invoked");
};
});
答案 1 :(得分:1)
小提琴工作正常。但是始终将您的Js代码包含在document.onready函数
中$(function(){
< your Js code here >
});
这是因为在浏览器呈现元素之前读取代码,因此在阅读时它无法绑定到任何甚至不存在的内容。因此,您的代码可能无效。
答案 2 :(得分:0)
通过将console.log
语句更改为alert()
窗口发疯,它们都在工作。那不是你的问题。