CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  JavaScript

onmouseout事件在Firefox与ie的select上的不同造成的麻烦:

楼主wuyg(平平)2006-03-17 23:04:38 在 Web 开发 / JavaScript 提问

onmouseout事件在Firefox与ie的select上的不同造成的麻烦:      
   
  我最近在设计一个界面,用到了一个自动出现和隐藏的列表选择select.      
     
  所以我把它放在一个div里面,必须支持firefox,但我在测试firefox的onmouseout事件时,发现它的      
  onmouseout事件远比ie里复杂,在ie里仅select本身有这个onmouseout事件,但在firefox里面不仅      
  Select有这个事件,而且里面的option,scrollBar等都有这个事件,尽管我只在select     上设置了这个事件,但里面的option,scrollBar等都触发这个事件,      
     
  这样我的事件处理就变成了这样:      
     
        if(event.srcElement){      
                element=event.srcElement;      
        }else{      
                element=event.target;      
                var     rele=event.relatedTarget;      
                //debugInfo.value=debugInfo.value+'\nCurrent     Node='+element.nodeName+     '     related     Node='+rele.nodeName;      
                if(rele.nodeName=='OPTION'     &&     element.nodeName=='OPTION'){      
                        return;      
                }      
                if(rele.nodeName=='OPTION'     &&     element.nodeName=='SELECT'){      
                        return;      
                }      
                if(rele.nodeName=='SELECT'     &&     element.nodeName=='OPTION'){      
                        return;      
                }      
        }      
  //     do     something...      
     
  看到没有,一个onmouseout     可能有许多种情况,从一个OPTION移动到另外一个OPTION,      
  从一个OPTION移动到SELECT,从一个OPTION移动到scrollBar,从一个scrollBar移动到OPTION,      
  从一个scrollBar移动到SELECT等等等等,更气人的是可以直接从OPTION移动到SELECT甚至div外面。      
     
  我的代码显然不是一个好的处理模式。有哪位高人有更好的解决方法吗? 问题点数:100、回复次数:9Top

1 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-18 08:36:43 得分 30

srcElement的tagname和parent的tagName一起判断,或者在select外面放一个span/div,在那里捕获onmouseoutTop

2 楼wuyg(平平)回复于 2006-03-18 08:54:03 得分 0

问题是只要鼠标移动得够快,就可以跳过中间的元素,直接从最里面到最外面了。  
   
  Top

3 楼woyingjie(Hobo)回复于 2006-03-18 09:02:00 得分 40

<select   onmouseout="alert(this.tagName);">  
  <option   onmouseout="event.stopPropagation();">1</option>  
  <option>2</option>  
  <option>3</option>  
  </select>Top

4 楼wuyg(平平)回复于 2006-03-19 06:43:13 得分 0

to   woyingjie(沃英杰)   :  
   
  这样每个option必须要设置,很麻烦,更麻烦的是在firefox里面,multiple   select   列表框  
  不管options的数量,都会自动显示垂直滚动条,而这个滚动条上是没有办法加上这个事件的。Top

5 楼wuyg(平平)回复于 2006-03-20 20:45:21 得分 0

顶Top

6 楼hansonboy(hansonboy)回复于 2006-03-21 09:12:14 得分 0

还没试过,   不过一提到firefox就烦,   不知哪个做它出来干嘛的,   做出来又不做好点,   害得我们程序员半死Top

7 楼wuyg(平平)回复于 2006-03-21 20:35:56 得分 0

我并不认为这个firefox的事件模型不好,只是与ie不同。试想你想要精确控制select本身,就可能需要这么多事件。Top

8 楼wuyg(平平)回复于 2006-05-04 21:54:06 得分 0

有谁能帮帮我?Top

9 楼wtogether(wtogether)回复于 2006-05-05 18:02:19 得分 30

把event作为参数传就可以了  
  function   event_test(e)  
  {  
          var   ee   =   window.event   ||   e;//这个ee就是event了  
          if   (ee.srcElement)  
          {  
                  //ie   的event元素  
          }  
          else   if   (ee.target)  
          {  
                  /firefox的event元素  
          }  
  }  
  <select   onmouseout="alert(this.tagName);">  
  <option   onmouseout="event_test(event);">1</option>  
  <option>2</option>  
  <option>3</option>  
  </select>Top

相关问题

  • IE也错,firefox也错?
  • Aton救救我吧,我与到大麻烦了,关于IE的
  • 我的ie那里出问题啦!!!麻烦高手指点!!!
  • ie,firefox中解析xsl的问题
  • FireFox和IE中的JS问题!
  • IE下的document.title,在firefox下怎么写?
  • firefox中实现ie的showModalDialog效果,但modal=yes不管用。
  • 我的网站上可以放.net,ie,firefox的logo吗?
  • clip属性在IE和FireFox中返回的值不同
  • 为什么IE支持这段javascript,而firefox不支持?

关键词

  • firefox
  • ie
  • 事件
  • nodename
  • rele
  • onmouseout
  • 麻烦
  • srcelement
  • 元素
  • event

得分解答快速导航

  • 帖主:wuyg
  • jiangsheng
  • woyingjie
  • wtogether

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo