【发布时间】:2011-05-11 03:22:43
【问题描述】:
我有一个旧函数缺少 Mozilla/Firefox 的行,因此 JavaScript 无法在其中正常工作。该函数跟踪鼠标坐标,以便我可以定位窗口。
如何让代码也能在 Firefox 中运行?
Xoffset = -60; // modify these values to ...
Yoffset = 20; // change the popup position.
var old, skn, iex = (document.all),
yyy = -1000;
var ns4 = document.layers
var ns6 = document.getElementById && !document.all
var ie4 = document.all
if (ns4) skn = document.dek
else if (ns6) skn = document.getElementById("dek").style
else if (ie4) skn = document.all.dek.style
if (ns4) document.captureEvents(Event.MOUSEMOVE);
else {
skn.visibility = "visible"
skn.display = "none"
}
document.onmousemove = get_mouse;
function popup(msg, bak) {
var content =
"<TABLE WIDTH=150 BORDER=1 BORDERCOLOR=black CELLPADDING=2" +
"CELLSPACING=0 " + "BGCOLOR=" + bak + "><TD ALIGN=center>" +
"<FONT COLOR=black SIZE=2>" + msg + "</FONT></TD></TABLE>";
yyy = Yoffset;
if (ns4) {
skn.document.write(content);
skn.document.close();
skn.visibility = "visible"
}
if (ns6) {
document.getElementById("dek").innerHTML = content;
skn.display = ''
}
if (ie4) {
document.all("dek").innerHTML = content;
skn.display = ''
}
}
function get_mouse(e) {
var x = (ns4 || ns6) ? event.pageX : event.x + document.body.scrollLeft;
skn.left = x + Xoffset;
var y = (ns4 || ns6) ? event.pageY : event.y + document.body.scrollTop;
if (document.documentElement && // IE6 +4.01 but no scrolling going on
!document.documentElement.scrollTop) {
y = event.y + document.documentElement.scrollTop;
}
else if (document.documentElement && // IE6 +4.01 and user has scrolled
document.documentElement.scrollTop) {
y = event.y + document.documentElement.scrollTop;
}
else if (document.body && document.body.scrollTop) { // IE5 or DTD 3.2
y = event.y + document.document.body.scrollTop;
}
skn.top = y + yyy;
}
function kill() {
yyy = -1000;
if (ns4) {
skn.visibility = "hidden";
}
else if (ns6 || ie4) skn.display = "none"
}
我收到此错误:
“事件未定义”
在 IE 中工作正常。
【问题讨论】:
-
说真的,使用 jQuery。它将所有关于不同浏览器界面的废话抽象为合理的东西。
-
看起来您在
get_mouse方法签名中将event变量定义为e。 -
+1 用于 jQuery。除此之外,NS已经死了。特别是 NS4...
-
问题是你的条件。您似乎正在测试 ns4 或 ns6,如果评估结果为 false,它将尝试计算 event.x。 Firefox 在 ns4 或 ns6 中不符合条件,也不支持 event.x。您需要在 (ns4 || ns6) 条件中添加一个 firefox 测试,因为它也使用 e.pageX
-
@Codex73 我不会测试浏览器,而是测试对象/属性是否存在。例如:“var x = e.pageX ? e.pageX : e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;” - 我认为可能有更简单的方法可以做到这一点,例如“var x = e.pageX || e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;”但我不确定这会奏效。测试一下,看看你会得到什么。另外,有关更多详细信息,请查看:quirksmode.org/js/events_properties.html
标签: javascript firefox dom javascript-events