自然,我们都习惯了 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. Lind.DDD.Paging分页模块介绍

    回到目录 分页组件网上有很多,MVC.Pager,JSPager等,通过实现方式大体分为前端分页和后端分页,前端分页是前台对list内存本地集合进行分页,缺点就是在大数据情况下,内存占用过高:后端分页 ...

  2. JMeter专题系列(七)聚合报告之 90% Line

    JMeter 官网原文: 90% Line - 90% of the samples took no more than this time. The remaining samples at lea ...

  3. 如何调用外部的Web API

    Uri uri = new Uri(url + "?" + postData); System.Net.HttpWebRequest request = (System.Net.H ...

  4. iOS之微信支付

    前言:下面介绍微信支付的开发流程的细节,图文并茂,你可以按照我的随笔流程过一遍代码.包你也学会了微信支付.而且支付也是面试常问的内容. 正文: 1.首先在开始使用微信支付之前,有一些东西是开发者必须要 ...

  5. MVC学习系列3--怎么从控制器向视图传递数据

    在MVC中,从控制器到视图,传递数据,可以使用 ViewData 和 ViewBag:同样从视图到控制器,传递数据,可以使用Post,QueryString,或者隐藏域:最后从控制器到控制器,传递数据 ...

  6. MySQL错误日志总结

    MySQL错误日志是记录MySQL 运行过程中较为严重的警告和错误信息,以及MySQL每次启动和关闭的详细信息.错误日志的命名通常为hostname.err.其中,hostname表示服务器主机名. ...

  7. Linux的NTP配置总结

    在Linux系统中,为了避免主机时间因为在长时间运行下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的.Linux系统下,一般使用ntp服务来同步不同机器的时间.NTP 是网 ...

  8. SELECT CAST(GETDATE() AS VARCHAR(10)) 显示不同格式的原因

    开发人员测试时,发现生产服务器与测试服务器执行SELECT CAST(GETDATE() AS VARCHAR(10))语句显示的格式不一样.如下所示 Server A Server B 其实出现这个 ...

  9. 使用EF自带的EntityState枚举和自定义枚举实现单个和多个实体的增删改查

    本文目录 使用EntityState枚举实现单个实体的增/删/改 增加:DbSet.Add = > EntityState.Added 标记实体为未改变:EntityState.Unchange ...

  10. DB监控-redis监控

    公司的redis业务很多,redis监控自然也是DB监控的一大模块,包括采集.展示.监控告警.本文主要介绍redis监控的主要指标和采集方法. 一.Redis监控系统逻辑 1.DBA通过前台页面添加r ...