自然,我们都习惯了 IE,在 IE 中要在函数中获得各事件对象很容易,直接用 event、event.srcElemtn、event.fromElement、event.toElement 就行了。在 FireFox 中获得触发事件的元素可以用 event.target,但其他两个 fromElement 和 toElement 就要费些周折。

 

1、event.srcElement :当前事件的源

   var obj = event.srcElement ? event.srcElement : event.target; //FF只能识别event.target
 
2、event.fromElement、event.toElement
   
  1. <script language="javascript">
  2. //addEventListener是为一个事件添加一个监听,使用方法见http://cindylu520.iteye.com/admin/blogs/588652
  3. //此处if判断是否是火狐浏览器
  4. if(window.addEventListener) { FixPrototypeForGecko(); }
  5. function  FixPrototypeForGecko()
  6. {
  7. //prototype属性允许你向一个对象添加属性和方法
  8. //__defineGetter__和__defineSetter__是Firefox的特有方法,可以利用来它自定义对象的方法。
  9. //使用方法见:http://cindylu520.iteye.com/admin/blogs/588667
  10. //runtimeStyle   运行时的样式!如果与style的属性重叠,将覆盖style的属性!
  11. HTMLElement.prototype.__defineGetter__("runtimeStyle",element_prototype_get_runtimeStyle);
  12. //代表事件状态,如事件发生的元素,键盘状态,鼠标位置和鼠标按钮状态。
  13. window.constructor.prototype.__defineGetter__("event",window_prototype_get_event);
  14. //event.srcElement当前事件的源,IE下,event对象有srcElement属性,但是没有target属性;Firefox下,event对象有target属性,但是没有srcElement属性.但他们的作用是相当的
  15. Event.prototype.__defineGetter__("srcElement",event_prototype_get_srcElement);
  16. //当前事件有移动成分时,如onmouseover、onmouseout等fromElement、toElement表示移动事件的两个端点
  17. Event.prototype.__defineGetter__("fromElement",  element_prototype_get_fromElement);
  18. Event.prototype.__defineGetter__("toElement", element_prototype_get_toElement);
  19. }
  20. function  element_prototype_get_runtimeStyle() { return  this.style; }
  21. function  window_prototype_get_event() { return  SearchEvent(); }
  22. function  event_prototype_get_srcElement() { return  this.target; }
  23. function element_prototype_get_fromElement() {
  24. var node;
  25. //relatedTarget 事件属性返回与事件的目标节点相关的节点。
  26. //对于 mouseover 事件来说,该属性是鼠标指针移到目标节点上时所离开的那个节点。
  27. //对于 mouseout 事件来说,该属性是离开目标时,鼠标指针进入的节点。
  28. //对于其他类型的事件来说,这个属性没有用。
  29. //详情:http://cindylu520.iteye.com/admin/blogs/588678
  30. if(this.type == "mouseover") node = this.relatedTarget;
  31. else if (this.type == "mouseout") node = this.target;
  32. if(!node) return;
  33. while (node.nodeType != 1)
  34. node = node.parentNode;
  35. return node;
  36. }
  37. function  element_prototype_get_toElement() {
  38. var node;
  39. if(this.type == "mouseout")  node = this.relatedTarget;
  40. else if (this.type == "mouseover") node = this.target;
  41. if(!node) return;
  42. while (node.nodeType != 1)
  43. node = node.parentNode;
  44. return node;
  45. }
  46. function  SearchEvent()
  47. {
  48. if(document.all) return  window.event;
  49. func = SearchEvent.caller;
  50. while(func!=null){
  51. var  arg0=func.arguments[0];
  52. if(arg0 instanceof Event) {
  53. return  arg0;
  54. }
  55. func=func.caller;
  56. }
  57. return   null;
  58. }
  59. </script>

好了,现在不管是在 IE 中还是在 FireFox 中,触发事件后都有了 event、event.srcElement、event.fromElement、event.toElement 属性了。这就来做个测试吧:

Java代码  
  1. <script>
  2. function test(){
  3. alert("event:" + event +", srcElement:"+event.srcElement.innerHTML+
  4. ", fromElement:"+event.fromElement.innerHTML + ", toElement:"+event.toElement.innerHTML)
  5. }
  6. </script>
  7. <button onmouseout="test()">MouseOut</button><button onmouseover="test()">MouseOver</button>

页面中有两个按钮 MouseOut 和 MouseOver,你掠过第一个按钮到第二个按钮上是,有看到这样内容的窗口:

从上图可以看出,其实我是在 Google 的 Chrome 浏览器中作的测试,也是有效的。标题虽说是兼容 IE 和 FireFox,但宽松点说就是 IE  和非 IE,因为 IE 总喜欢剑起偏锋,不按规范办事,不过这种事在 IE 8 中是收敛了许多。

event.srcElement ,event.fromElement,event.toElement的更多相关文章

  1. Javascript中event.srcElement和event.target的区别

    event.srcElement 可以捕获当前事件作用的对象,如event.srcElement.tagName可以捕获活动标记名称.注意获取的标记都以大写表示,如"TD",&qu ...

  2. js的event.srcElement与event.target(触发事件对象)

    IE下,event对象有srcElement属性,但是没有target属性; Firefox下,event对象有target属性,但是没有srcElement属性.但他们的作用是相当的,即: fire ...

  3. event.srcElement 用法笔记e.target

    event.srcElement 可以捕获当前事件作用的对象,如event.srcElement.tagName可以捕获活动标记名称. 注意获取的标记都以大写表示,如"TD",&q ...

  4. event.srcElement兼容处理

    在IE下,event对象有srcElement属性,但是没有target属性:Firefox下,even对象有target属性,但是没有srcElement属性.. 解决方法:使用obj(obj = ...

  5. event.srcElement与event.target的区别

    window.event.srcElement与window.event.target 都是指向触发事件的元素,它是什么就有什么样的属性 srcElement是事件初始化目标html元素对象引用,因为 ...

  6. 浏览器中event.srcElement和event.target的兼容性问题

    在IE下,event对象有srcElement属性,但是没有target属性:Firefox下,even对象有target属性,但是没有srcElement属性.. 解决方法:使用obj(obj = ...

  7. e.target和e.event和event.srcElement

    e.target 是目标对象,e.event是目标所发生的事件,event.srcElement捕获当前事件作用的对象 1. $(function(){ $("li:has(ul)" ...

  8. JS基础篇--JS的event.srcElement与event.target(触发事件对象)

    IE下,event对象有srcElement属性,但是没有target属性; Firefox下,event对象有target属性,但是没有srcElement属性.但他们的作用是相当的,即: fire ...

  9. window.event.srcElement与window.event.target 触发事件的元素 触发事件对象的获取,window.event与时间函数参数的event是同一个 事件对象

    判断事件触发的元素:     var tag = window.event.target || window.event.srcElement;    if (tag.tagName.toLowerC ...

随机推荐

  1. MongoDB基础入门001--安装

    关于mongodb的好处,优点之类的这里就不说了,唯一要讲的一点就是mongodb中有三元素:数据库,集合,文档,其中"集合" 就是对应关系数据库中的"表",& ...

  2. java web学习总结(四) -------------------HTTP协议

    一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...

  3. 配置文件(App.config文件)

    1. 配置文件概述: 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是 co ...

  4. javascript实现下雪效果

    原理: 1.js动态创建DIV,指定CLASS类设置不同的背景图样式显示不同的雪花效果. 2.js获取创建的DIV并改变其top属性值,当下落的高度大于屏幕高后删除该移动div 3.好像不够完善勿喷 ...

  5. Linux vi/vim(转载)

    Linux vi/vim 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主 ...

  6. Introduction to Microsoft Dynamics 365 licensing

    Microsoft Dynamics 365 will be released on November 1. In preparation for that, Scott Guthrie hosted ...

  7. Android 手机卫士--设置密码对话框

    本文实现初次设置密码验证过程,首先实现如下效果 本文地址:http://www.cnblogs.com/wuyudong/p/5939823.html,转载请注明出处. 布局如下: <?xml ...

  8. iOS程序破解——获取.ipa程序包

    原文在此 首先肯定不是获取自己的ipa包. 为什么要获取ipa包呢?比如,在仿写一些程序时,避免不了获取它的图片素材等等,那么最快也是最有效的方式就是获取原程序的ipa包.更或者,你想要逆向分析某一款 ...

  9. routes.rb和link_to的一些规则

    rails文档中描述了一个知识,link_to方法用于产生链接,但链接是根据routes.rb中的路由规则来产生的.这又分为面向资源和非面向资源两种产生链接的方法.比如 routes.rb文件中有两条 ...

  10. JVM-Class文件

    一个 Class 文件描述了类或接口的字段,方法,父类,访问权限等全部信息.其实,它只是一种能被 JVM 识别的数据格式,就和 UDP 8字节头部一样,这就是规范,标准!所谓"不闻不若闻之, ...