`
karlmax
  • 浏览: 42446 次
  • 来自: ...
社区版块
存档分类
最新评论

ff 与ie 事件处理(转载)

阅读更多
IE与firefox事件处理
2007-06-27 13:26
  1. 在ie中,事件对象是作为一个全局变量来保存和维护的。 所有的浏览器事件,不管是用户触发
    的,还是其他事件, 都会更新window.event 对象。 所以在代码中,只要轻松调用 window.event
    就可以轻松获取 事件对象, 再 event.srcElement 就可以取得触发事件的元素进行进一步处理
  2. 在ff中, 事件对象却不是全局对象,一般情况下,是现场发生,现场使用,ff把事件对象自动传
    递给对应的事件处理函数。        在代码中,函数的第一个参数就是ff下的事件对象了。


     以上是我个人对两个浏览器下的事件处理方法的粗浅理解,可能说得不是很明白,我写些代码来
     详细说明一下
   
  

1 <button id="btn1">按钮1button>
2 <button id="btn2">按钮2button>
3 <button id="btn3">按钮3button>
4
5 <script>
6
7 window.onload=function(){
8      document.getElementById("btn1").onclick=foo1
9      document.getElementById("btn2").onclick=foo2
10      document.getElementById("btn3").onclick=foo3
11 }
12
13 function foo1(){
14      //ie中, window.event使全局对象
15      alert(window.event)   // ie下,显示 "[object]" ,   ff下显示 "undefined"
16     
17     //ff中,   第一个参数自动从为 事件对象
18      alert(arguments[0])   // ie下,显示   "undefined",   ff下显示 "[object]"
19 }
20
21 function foo2(e){
22      alert(window.event)  // ie下,显示 "[object]" ,   ff下显示 "undefined"
23     
24     //注意,我从来没有给   foo2传过参数哦。   现在 ff自动传参数给 foo2, 传的参数e 就是事件对象了
25      alert(e)               // ie下,显示   "undefined",   ff下显示 "[object]"
26 }
27
28 function foo3(){    //同时兼容ie和ff的写法,取事件对象
29      alert(arguments[0] || window.event)  // ie 和 ff下,都显示 "[object]"
30     var evt=arguments[0] || window.event
31     var element=evt.srcElement || evt.target  //在 ie和ff下   取得 btn3对象
32      alert(element.id)           //     btn3
33 }
34 script>
35

看到这里,我们似乎对 ie和ff的事件处理方式都已经理解了,并找到了解决的办法。

但是。。。。事情还没有结束。

看代码

<button id="btn" onclick="foo()">按钮1button>

<script>
function foo(){   
     alert(arguments[
0] || window.event)
}
script>


很不幸,我们 foo给我们的结果是   undefined, 而不是期望的 object

原因在于 事件绑定的方式
      onclick="foo()"    就是直接执行了, foo() 函数,没有任何参数的,
      这种情况下 firefox没有机会传递任何参数给foo
    而 btn.onclick=foo    这种情况, 因为不是直接执行函数,firefox才有机会传参数给foo

解决方法:

      方法一:比较笨的方法,既然 firefox没有机会传参数,那么自己勤快点,自己传

 

 

<button id="btn" onclick="foo(event)">按钮button>


<script>
function foo(){   
    alert(arguments[
0] || window.event)        
   
var evt=arguments[0] || window.event
   
var element=evt.srcElement || evt.target  
    alert(element.id)   
}
script>

   
    方法二: 自动查找

1 <button id="btn4" onclick="foo4()">按钮4button>
2
3 <script>
4
5 function foo4(){   
6     var evt=getEvent()
7     var element=evt.srcElement || evt.target  
8      alert(element.id)         
9 }
10
11 function getEvent(){     //同时兼容ie和ff的写法
12         if(document.all)    return window.event;        
13          func=getEvent.caller;            
14         while(func!=null){    
15             var arg0=func.arguments[0];
16             if(arg0){
17                 if((arg0.constructor==Event || arg0.constructor ==MouseEvent)
18                     || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation)){    
19                     return arg0;
20                  }
21              }
22              func=func.caller;
23          }
24         return null;
25 }
26 script>
27

方法二由   lostinet原创,我在其基础上有所改进,   原函数如下

 

1function SearchEvent()
2{
3    //IE
4    if(document.all)
5        return window.event;
6        
7     func=SearchEvent.caller;
8    while(func!=null)
9    {
10        var arg0=func.arguments[0];
11        if(arg0)
12        {
13            if(arg0.constructor==Event)
14                return arg0;
15         }

16         func=func.caller;
17     }

18    return null;
19}



简单总结:
     以上两个解决方法中,都正确处理   ff和ie下    的事件处理 (不管是onclick="foo()",方式还是   onclick=foo方式)
但是个人建议用   getEvent() 方法来统一处理 事件问题

分享到:
评论

相关推荐

    FF和IE的兼容性问题总结

    这些浏览器在处理JavaScript、DOM操作以及事件处理等方面的差异,可能导致代码在不同浏览器上表现不一致。以下是对这些兼容性问题的详细解析和解决策略: 1. **文档元素访问**:在IE中,可以使用`document.formName...

    IE和FF的部分区别

    - IE提供全局的`window.event`对象,而FF的事件对象在事件处理函数内部可用。为解决这个问题,可以在事件处理函数中传递`event`参数,并使用条件语句获取事件对象。 7. **事件源属性**: - IE的事件对象有`...

    FF和IE兼容性问题

    总的来说,理解和处理FF与IE之间的CSS兼容性问题需要开发者具备深入的CSS知识,并且时刻关注最新的浏览器发展趋势。随着IE的逐渐淘汰,更多的注意力转向了对Edge浏览器和其他现代浏览器的兼容性优化。然而,对于仍需...

    FF与IE对javascript和CSS的区别

    本文将详细讨论FF(Firefox)与IE(Internet Explorer)在处理这两种技术时存在的差异,并提供相应的解决策略。 1. **form元素访问方式**:在IE下,可以使用`document.formName.item("itemName")`或`document.form...

    IE与FF脚本兼容性问题

    ### IE与FF脚本兼容性问题详解 #### 一、概述 随着Web技术的发展,不同浏览器之间的兼容性问题一直是前端开发者关注的重点。本文主要探讨Internet Explorer(简称IE)与Mozilla Firefox(简称FF或MF)之间在...

    FF 与 IE 中部分JS、CSS区别

    2. **事件处理**: - **addEventListener与attachEvent**:FF使用`addEventListener`来添加事件监听器,而IE则使用`attachEvent`。开发者需要编写兼容代码来确保在两种浏览器上都能正确处理事件。 3. **BOM...

    JavaScript在IE和FF中的区别

    为在两种浏览器中都能正确处理事件,可以将事件参数传递给事件处理函数,并在函数内部处理。 9. 事件坐标:IE的事件对象有`x`和`y`属性,Firefox有`pageX`和`pageY`。要获取一致的坐标,可以定义`mX`和`mY`来分别...

    CSS样式表下FF与IE的区别

    这些差异主要集中在盒模型、居中对齐、边框与背景、鼠标指针样式、以及脚本处理等方面。理解这些差异对于创建跨浏览器兼容的网页至关重要。 1. 盒模型差异: Firefox遵循W3C的标准盒模型,其中`width`和`height`只...

    IE与FF的兼容问题

    ### IE与FF的兼容问题 #### CSS篇 在网页开发过程中,不同的浏览器对CSS的支持程度不一,导致了诸多兼容性问题。以下列举了一些IE(Internet Explorer)与Firefox(火狐浏览器)之间的常见CSS兼容性差异及其解决...

    JS事件在IE与FF中的区别详细解析

    在IE中,使用的是`attachEvent`方法来附加事件处理程序,而在FF和其他遵循W3C标准的浏览器中,使用的是`addEventListener`方法。 例如,如果我们有一个HTML元素,如一个`select`元素,我们想在用户点击这个元素时...

    FF650R17IE4.pdf

    FF650R17IE4.pdf

    【速查手册】IE与FF下JS的区别

    【速查手册】IE与FF下JS的区别 JavaScript是一种广泛应用于网页和网络应用的脚本语言,它在不同浏览器中的实现可能存在差异。IE(Internet Explorer)和FF(Firefox)是两个历史上非常重要的浏览器,它们对...

    ie6 ie7 ff浏览器兼容

    ### 浏览器兼容性问题解析:针对IE6、IE7与Firefox的样式处理 在Web开发中,浏览器兼容性始终是一项重要的考虑因素。不同浏览器对CSS的支持程度不一,尤其是对于早期版本的Internet Explorer(IE)如IE6、IE7,以及...

    支持FF、IE6下很实用的三级下拉菜单

    总的来说,实现“支持FF、IE6下面很实用的三级下拉菜单”涉及了跨浏览器兼容性问题的解决,HTML结构的设计,CSS样式的应用,以及JavaScript事件处理。这个过程需要开发者具备扎实的前端技术基础,同时也体现了前端...

    firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码

    ### Firefox与IE事件处理机制详解 #### 一、引言 在Web开发中,兼容不同浏览器的事件处理机制是一项挑战性的任务。特别是当涉及到Internet Explorer(IE)与Firefox这两种浏览器时,由于它们对于事件处理机制有着...

    JS图片预览(兼容IE6、IE7、IE8和FF)

    3. 兼容IE的事件处理:IE6、IE7、IE8不支持标准的DOM0级和DOM2级事件处理方式,所以需要使用`attachEvent`方法来绑定事件。例如,用`element.attachEvent('onmouseover', function() {...})`代替`element....

    兼容ie6/ie7/ie8/ff 省市县的js

    标题“兼容ie6/ie7/ie8/ff 省市县的js”指的是一个JavaScript插件或库,其主要目的是解决浏览器兼容性问题,特别是针对较老版本的Internet Explorer(IE6、IE7、IE8)以及Firefox(FF)。这个选择器功能允许用户在...

    IE与FF的CSS兼容问题大集合

    ### IE与FF的CSS兼容问题大集合 在前端开发中,不同浏览器对于CSS的支持程度不同,这往往会导致页面在不同的浏览器下显示效果不一致。本文将详细介绍Internet Explorer(IE)和Firefox(FF)两种浏览器之间常见的...

Global site tag (gtag.js) - Google Analytics