CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  JavaScript

取得event对象的变通方法

楼主ice_berg16(寻梦的稻草人)2006-02-23 15:00:45 在 Web 开发 / JavaScript 提问

IE和firefox的事件模型有一定差别,firefox中必须手动传一个event对象给函数,函数中才可以使用  
  而我们一般有时候是这样写事件  
  <input   type="button"   onclick="fire()"/>  
  这个时候在IE中直接在fire函数中用window.event即可,firefox中就无能为力了,如果改成fire(e)  
  在fire函数中用e   =   window.event   ||   e;发现还是不对。  
  原来系统默认套了一层函数使之成为onclick=function   MouseClick(event){fire()};  
  那么如何在fire中取得event对象呢?  
  看下面代码,可能有BUG,欢迎大家讨论。  
   
  -------------------  
  <html>  
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  <title></title>  
  <script   language="javascript">  
  function   getEvent()  
  {  
  if(   window.event   )   return   window.event;  
  var   f   =   arguments.callee;  
  while(caller=   f.caller){f=f.caller;}  
  return   f.arguments[0];  
  }  
  function   test(){  
  e   =   getEvent();  
  alert(e.clientX);  
  }  
  function   funb(){  
  e   =   getEvent();  
  alert(e.clientX);  
  }  
  </script>  
  </head>  
  <body>  
  <input   type=button   value="test"   onclick="test()">  
  <script   language="javascript">  
  document.getElementsByTagName("input")[0].onmouseover=function(){  
  funb();  
  }  
  </script>  
  </body>  
  </html>  
  <script>  
  </script>  
  ---------------  
  这样我们就可以像使用window.event一样方便的使用事件对象了。 问题点数:200、回复次数:7Top

1 楼ttyp(@http://www.cnblogs.com/ttyp/)回复于 2006-02-23 15:24:06 得分 100

<input   type=button   value="test"   onclick="test()">  
  <script   language="javascript">  
  document.getElementsByTagName("input")[0].onmouseover=function(e){  
  var   ee   =   window.event||e;  
   
  alert(ee.clientX);  
  }  
  </script>  
   
   
  window2k,ff,ie6.0下运行通过Top

2 楼kangqin(小康)回复于 2006-02-23 15:27:47 得分 30

一楼的回复是合理解决方法.Top

3 楼ice_berg16(寻梦的稻草人)回复于 2006-02-23 16:40:29 得分 0

to   ttyp  
  你这种方法当然可以,  
  但我的意思你没有理解,  
  onclick="test()",我是说在test()函数中获得event对象,Top

4 楼ice_berg16(寻梦的稻草人)回复于 2006-02-23 16:41:56 得分 0

而且如果函数调用的层次很深怎么办?  
  你还要一次一次的传递e给调用的函数吗?Top

5 楼ttyp(@http://www.cnblogs.com/ttyp/)回复于 2006-02-23 16:50:44 得分 0

哦,你是想要个全局变量的概念?  
   
  不过在FF下,如果调用的很深是传下去的,这样似乎结果性更好点吧?Top

6 楼mingxuan3000(铭轩)回复于 2006-02-23 21:06:35 得分 35

学习Top

7 楼guo9038(琥珀)回复于 2006-02-24 08:52:06 得分 35

MarkTop

相关问题

  • 如何去取得一个HttpServletRequest对象?
  • 怎样通过对象的ID取得该对象的值??
  • 如何取得进程的“GDI对象”和“USER对象”计数?
  • 怎样取得对象的地址?(关键字:内存地址 对象 引用)
  • 怎样取得有焦点的对象的类型及名称?
  • 如何取得数据窗口中对象的个数
  • 怎样取得dw所绑定对象的列名
  • 如何通过word对象取得文档的总页数?
  • 如何取得一个对象的数据成员的地址?
  • 如何取得触发发生者对象

关键词

得分解答快速导航

  • 帖主:ice_berg16
  • ttyp
  • kangqin
  • mingxuan3000
  • guo9038

相关链接

  • Web开发类图书

广告也精彩

反馈

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