这是一个非常经典的问题, 虽然你的事件处理是放在TD里的, 但是你的TD里包含了一个<A>标签, 鼠标在划进/划出这个<A>的时候也会触发TD里的事件, 当然你在TD里放其它的任意标签都会有这种结果, 所以一般碰到这种问题我的解决办法就是加 setTimeout() 延迟事件的触发, 在onmouseout之后的比较说10微秒内又发生了onmouseover那么 onmouseout 的事件将不被触发(clearTimeout), 当然你若是在TD不放任何HTML标签, 只是纯文本就没有这个问题了.
加个判断就是。
onmouseover="if(!this.contains(event.fromElement)) mouseOverFun();"
onmouseout="if(!this.contains(event.toElement)) mouseOutFun();"见以下分析。
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>JK:支持民族工业,尽量少买X货</title>
</head><body >
<pre>关于mouseover 和 mouseout,JK的理解是:1.this:指代触发事件的对象
2.fromElement:event.fromElement
3.toElement:event.toElementIE的做法似乎是:
如果 (fromElement!=toElement) && (toElement ∈ this) 就触发onmouseover事件一次
如果 (fromElement!=toElement) && (fromElement ∈ this) 就触发onmouseout事件一次见下例,鼠标在下图区移动,注意五个input里值的变化。
</pre><div id=span1 style="border: 10px solid red"
onmouseover="ieMouseOver.value=ieMouseOver.value*1+1;if(!this.contains(event.fromElement)) ourMouseOver.value=ourMouseOver.value*1+1;"
onmouseout="ieMouseOut.value=ieMouseOut.value*1+1;if(!this.contains(event.toElement)) ourMouseOut.value=ourMouseOut.value*1+1;"
onmousemove="ieMouseMove.value=ieMouseMove.value*1+1;"
>span1
<div style="background-color: #E0FFF0" style="border: 10px solid blue;" > span2
<div style="background-color: #E0FFF0" style="border: 10px solid yellow" > span3
</div>
span2
</div>
span1
</div>
ie mouseOver:<input id=ieMouseOver><br/>
ie mouseOut:<input id=ieMouseOut><br/>
mouseMove:<input id=ieMouseMove><br/>
our mouseOver:<input id=ourMouseOver><br/>
our mouseOut:<input id=ourMouseOut><br/> </body></html>
http://community.csdn.net/Expert/topic/3487/3487387.xml?temp=.8768427
if(typeof(HTMLElement)!="undefined")
{
HTMLElement.prototype.contains = function(obj)
{
while(obj!=null && typeof(obj.tagName)!="undefind")
{if(obj==this) return true; obj=obj.parentNode;} return false;
};
}