`
cindylu520
  • 浏览: 147507 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

创建兼容 IE/FireFox 的 event 及 event 的 srcElement、fromElement、toElement 属性

阅读更多

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

所以,为了保持一致的使用方式,也为了保持原有的使用习惯,我们加入以下 JS 代码(代码有些紧凑,未加注释,应该很好理解):

 

<script language="javascript">
	//addEventListener是为一个事件添加一个监听,使用方法见http://cindylu520.iteye.com/admin/blogs/588652
	//此处if判断是否是火狐浏览器
  if(window.addEventListener) { FixPrototypeForGecko(); }  

  function  FixPrototypeForGecko()  
  {  
  	//prototype属性允许你向一个对象添加属性和方法
  	//__defineGetter__和__defineSetter__是Firefox的特有方法,可以利用来它自定义对象的方法。
  	//使用方法见:http://cindylu520.iteye.com/admin/blogs/588667
  	//runtimeStyle   运行时的样式!如果与style的属性重叠,将覆盖style的属性!
      HTMLElement.prototype.__defineGetter__("runtimeStyle",element_prototype_get_runtimeStyle);  
      //代表事件状态,如事件发生的元素,键盘状态,鼠标位置和鼠标按钮状态。
      window.constructor.prototype.__defineGetter__("event",window_prototype_get_event);  
      //event.srcElement当前事件的源,IE下,event对象有srcElement属性,但是没有target属性;Firefox下,event对象有target属性,但是没有srcElement属性.但他们的作用是相当的
      Event.prototype.__defineGetter__("srcElement",event_prototype_get_srcElement);  
      //当前事件有移动成分时,如onmouseover、onmouseout等fromElement、toElement表示移动事件的两个端点
      Event.prototype.__defineGetter__("fromElement",  element_prototype_get_fromElement);  
      Event.prototype.__defineGetter__("toElement", element_prototype_get_toElement);
      
  }  

  function  element_prototype_get_runtimeStyle() { return  this.style; }  
  function  window_prototype_get_event() { return  SearchEvent(); }  
  function  event_prototype_get_srcElement() { return  this.target; }  

  function element_prototype_get_fromElement() {  
      var node;  
      //relatedTarget 事件属性返回与事件的目标节点相关的节点。
      //对于 mouseover 事件来说,该属性是鼠标指针移到目标节点上时所离开的那个节点。
      //对于 mouseout 事件来说,该属性是离开目标时,鼠标指针进入的节点。
     //对于其他类型的事件来说,这个属性没有用。
     //详情:http://cindylu520.iteye.com/admin/blogs/588678
			if(this.type == "mouseover") node = this.relatedTarget;  
      else if (this.type == "mouseout") node = this.target;  
      if(!node) return;  
      while (node.nodeType != 1) 
          node = node.parentNode;  
      return node;  
  }

  function  element_prototype_get_toElement() {  
          var node;  
          if(this.type == "mouseout")  node = this.relatedTarget;  
          else if (this.type == "mouseover") node = this.target;  
          if(!node) return;  
          while (node.nodeType != 1)  
             node = node.parentNode;  
          return node;  
  }
   
  function  SearchEvent()  
  {  
      if(document.all) return  window.event;  
       
      func = SearchEvent.caller;  

      while(func!=null){  
          var  arg0=func.arguments[0];  
          
          if(arg0 instanceof Event) {  
              return  arg0;  
          }  
         func=func.caller;  
      }  
      return   null;  
  }
</script>

  

 

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

<script>
  function test(){
      alert("event:" + event +", srcElement:"+event.srcElement.innerHTML+
	    ", fromElement:"+event.fromElement.innerHTML + ", toElement:"+event.toElement.innerHTML)
  }
</script>

<button onmouseout="test()">MouseOut</button><button onmouseover="test()">MouseOver</button>

 

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


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

 

(转自:http://kb.cnblogs.com/b/286274/)

分享到:
评论

相关推荐

    兼容IE和Firefox获得keyBoardEvent对象

    兼容IE和Firefox获得keyBoardEvent对象 在 JavaScript 编程中,获得keyBoardEvent对象是非常重要的,但是不同的浏览器对其支持不同。IE和Firefox是两种最常用的浏览器,它们对keyBoardEvent对象的支持存在一定的...

    同时兼容IE和FireFox的事件处理event代码--添加文件上传例子

    "同时兼容IE和FireFox的事件处理event代码--添加文件上传例子"这个主题聚焦于解决浏览器之间的差异,尤其是针对老版本的Internet Explorer(IE)和Firefox。在这些早期浏览器中,事件处理的实现方式有所不同,导致...

    兼容IE与FireFox

    ### 兼容IE与Firefox:JS代码详解 在Web开发过程中,确保JavaScript代码能够在不同的浏览器上正常运行是一项挑战性任务。特别是在早期版本的Internet Explorer(IE)与Firefox之间实现兼容性,更是如此。本文将详细...

    event和srcElement说明,方法,技巧

    这个属性在Internet Explorer(IE)浏览器中被广泛支持,但在非IE浏览器中,如Firefox、Chrome等,则使用`event.target`属性来达到相同的目的。 #### 三、event.srcElement与event.target 在IE中,`event....

    Firefox浏览器兼容JS脚本

    在处理CSS兼容性问题时,有时会发现某些CSS属性在Firefox和IE中的表现不同。例如,“cursor: hand;”在IE中显示为手形光标,而在Firefox中可能不被识别。这种情况下,建议使用“cursor: pointer;”以确保跨浏览器的...

    Javascript在IE和FireFox中的兼容处理

    - IE的事件目标是`event.srcElement`,Firefox则是`event.target`。可以统一使用`event.target`,因为它在所有现代浏览器中都可用。 8. **body的存在问题** - IE有时在`document.body`未加载时就执行脚本,Fire...

    ie 和 firefox 的javascript 兼容问题(网上下载的).doc

    ### IE和Firefox的JavaScript兼容性问题详解 #### 1. `document.formName.item("itemName")` 问题 在处理表单元素时,IE 和 Firefox 对 `document.formName.item("itemName")` 的支持存在差异。 **说明:** - **...

    js兼容IE火狐问题

    由于各个浏览器对JavaScript的支持程度和实现方式有所差异,所以需要采取特定的策略来处理这些差异,以确保代码在Internet Explorer(IE)和Mozilla Firefox(FF)等浏览器上都能正常运行。以下是针对IE和FF兼容性...

    ie firefox 兼容问题大全

    ### IE与Firefox兼容性问题详解 #### 一、概述 在网页开发过程中,浏览器兼容性问题一直是前端开发者面临的重要挑战之一。尤其是对于早期版本的Internet Explorer(简称IE)与Mozilla Firefox(简称Firefox)来说...

    IE和Firefox在css,JavaScript方面的兼容性

    标题与描述均聚焦于“IE和Firefox在css,JavaScript方面的兼容性”,这涉及到网页开发中一个重要的议题:浏览器兼容性。在web开发中,确保代码能在不同浏览器上正常运行是至关重要的,因为用户可能使用各种不同的...

    IE和Firefox中J avaScript兼容

    本文将详细介绍在IE与Firefox浏览器之间实现JavaScript脚本兼容的方法,主要涉及函数、属性、方法等方面的内容。 #### 1. 获取表单元素 - **IE**: 支持`document.formName.item("itemName")`和`document.formName....

    js在IE和fireFox的区别

    以上是JavaScript在Internet Explorer (IE) 和 Firefox 中的一些主要区别及统一的解决方案。在进行跨浏览器开发时,理解这些差异至关重要,以便能够编写兼容性强且可靠的代码。此外,随着Web标准的发展,许多现代...

    IE和firefox浏览器的event事件兼容性汇总

    本文将深入探讨IE和Firefox浏览器中event事件的兼容性问题。 1. **event对象的使用** 在IE浏览器中,事件处理函数可以直接访问到全局的`event`对象,而Firefox和其他遵循W3C标准的浏览器则不支持这种全局访问方式...

    javascript验证只能输入数字(兼容IE和火狐)

    本话题将详细介绍如何使用JavaScript实现一个功能,即验证用户只能输入数字,并且这个验证方法要兼容Internet Explorer(IE)和Firefox这两个主流浏览器。 首先,我们需要理解JavaScript的基本语法,特别是在处理...

    给moz-firefox下添加IE方法和属性

    ### 给moz-firefox下添加IE方法和属性 #### 背景介绍 在Web开发过程中,由于不同的浏览器对Web标准的支持程度不一,开发者往往需要处理浏览器间的兼容性问题。尤其是在早期,Internet Explorer(IE)与其他现代...

    javascript option onclick事件ie解决方案 兼容ie,firefox

    JavaScript Option onclick 事件 IE 解决方案及兼容 IE 和 Firefox JavaScript 中的 Option onclick 事件是用户在Select 元素中选择一个选项时触发的事件,但是在 Internet Explorer(IE)浏览器中,该事件无法正确...

    js放大缩小拖拽图片(兼容IE、火狐)

    本文将详细介绍一个JavaScript脚本,该脚本可以实现图片的放大、缩小以及拖拽功能,并且能够兼容Internet Explorer (IE) 和 Firefox 浏览器。通过这个脚本,我们可以为用户提供更加灵活的图片浏览体验。 #### 核心...

    css和javascript在IE和Firefox中二十三个不同点

    - **事件源访问**:IE使用`event.srcElement`,Firefox使用`event.target`。处理事件时,需要根据浏览器类型选择合适的属性。 除了以上列举的点,还有其他差异,如CSS样式解析、事件冒泡和捕获、JSON支持、正则...

Global site tag (gtag.js) - Google Analytics