这是一个非常经典的问题, 虽然你的事件处理是放在TD里的, 但是你的TD里包含了一个<A>标签, 鼠标在划进/划出这个<A>的时候也会触发TD里的事件, 当然你在TD里放其它的任意标签都会有这种结果, 所以一般碰到这种问题我的解决办法就是加 setTimeout() 延迟事件的触发, 在onmouseout之后的比较说10微秒内又发生了onmouseover那么 onmouseout 的事件将不被触发(clearTimeout), 当然你若是在TD不放任何HTML标签, 只是纯文本就没有这个问题了.

解决方案 »

  1.   

    不需要加setTimeout,
    加个判断就是。
    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) &amp;&amp; (toElement ∈ this)  就触发onmouseover事件一次
    如果 (fromElement!=toElement) &amp;&amp; (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;" > &nbsp;span2&nbsp;
     <div style="background-color: #E0FFF0" style="border: 10px solid yellow" > &nbsp;span3&nbsp;
     </div>
     &nbsp;span2&nbsp;
     </div>
     &nbsp;span1&nbsp;
     </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>
      

  2.   

    meizz(梅花雪) 也曾经发过相关的一个贴子讨论过:
    http://community.csdn.net/Expert/topic/3487/3487387.xml?temp=.8768427
      

  3.   

    contains 好东东, 怎么我以前没有注意它呢? 可以非IE的不支持
      

  4.   

    你把触发事件写在<a href>里不行吗?
      

  5.   

    //非IE浏览器里的 contains 的方法扩展
    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;
      };
    }