IE与firefox事件处理
2007-06-27 13:26
1
<
button id
=
"
btn1
"
>
按钮1
</
button
>
2 < button id = " btn2 " > 按钮2 </ button > 3 < button id = " btn3 " > 按钮3 </ button > 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()
"
>
按钮1
</
button
>
< script > function foo(){ alert(arguments[ 0 ] || window.event) } </ script >
解决方法: 方法一:比较笨的方法,既然 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()
"
>
按钮4
</
button
>
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原创,我在其基础上有所改进, 原函数如下
1
function
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}
|