怎么样,
[here is a small page illustrating my problem](问题出现在Firefox中)
所以我有一个函数onmouseout="regress(event, this)"
来测试鼠标实际是否超出了当前元素及其任何子元素。 (more details on why I did this and what is the matter)。
如果鼠标真的在外面,我想停止按钮上的动画并重置一个计时器(我做了)。它有效。
只有它没有。在Firefox(测试版v5.0)中。我收到了与DOM相关的错误。触发该函数的元素的parentNode
为“”,然后其父元素将为“未定义”,然后出现错误并且代码爆炸。
这是令人困惑的部分:只有当鼠标真正脱离按钮区域时才会出现此错误。还有另一种情况是onmouseout事件被触发(为了避免我使用这个函数)。这是按钮的另一个孩子的按钮的孩子。在这种情况下,parentNode
工作正常,从buttonChild到button到buttonParent再到blabla到BODY然后停止。
我的问题是,为什么未定义的错误出现在一个案例中而不出现在另一个案例中。请注意,Chrome或IE9中没有错误。另外我该如何解决?
这令我感到困惑。谢谢你的帮助。
我很困惑。
此处还有javascript函数:
function regress(evt, x){
//if (!e && window.event)
if (window.event)
var e = window.event;
else
var e = evt; //if we got here, you're using Firefox
var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
while (reltg.tagName != 'body')
{
//alert(reltg.id+" == " + x.id);
if (reltg.id == x.id)
{
return;
}
reltg = reltg.parentNode;
//alert(reltg.tagName);
}
// I'm on true mouseout, do stuff here:
$("#"+x.id+"ThickParent").stop(true, false);
$("#"+x.id+"ThickParent").width(0);
canStartAgain=true;
stopInterval = true;
timerValue = 1.50;
$("#"+x.id+"Timer").html("");
//thanks to: http://www.webmasterworld.com/javascript/3752159.htm
}
取消注释//alert(reltg.id+" == " + x.id);
以确切了解onmouseout
何时被触发以及什么元素reltg.parentNode
在什么时间开启。
答案 0 :(得分:2)
null
,当您尝试访问tagName
的{{1}}属性时,会抛出错误。要达到预期效果,您必须将停止条件更改为null
,或者将最有效的错误更改为while (reltg.tagName != 'html')
。