网站后台密码重置,品牌型网站制作,网站的规划与建设_按时间顺序可以分为哪等五个阶段,微信营销定位在ie中#xff0c;事件对象是作为一个全局变量来保存和维护的。 所有的浏览器事件,不管是用户触发 的#xff0c;还是其他事件#xff0c; 都会更新window.event 对象。 所以在代码中#xff0c;只要轻松调用 window.event 就可以轻松获取 事件对象#xff0c; 再 event.s… 在ie中事件对象是作为一个全局变量来保存和维护的。 所有的浏览器事件,不管是用户触发 的还是其他事件 都会更新window.event 对象。 所以在代码中只要轻松调用 window.event 就可以轻松获取 事件对象 再 event.srcElement 就可以取得触发事件的元素进行进一步处理 在ff中 事件对象却不是全局对象一般情况下是现场发生现场使用ff把事件对象自动传 递给对应的事件处理函数。 在代码中函数的第一个参数就是ff下的事件对象了。 以上是我个人对两个浏览器下的事件处理方法的粗浅理解可能说得不是很明白我写些代码来 详细说明一下 1 button idbtn1按钮1/button 2 button idbtn2按钮2/button 3 button idbtn3按钮3/button 4 5 script 6 7 window.οnlοadfunction(){ 8 document.getElementById(btn1).οnclickfoo1 9 document.getElementById(btn2).οnclickfoo2 10 document.getElementById(btn3).οnclickfoo3 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 evtarguments[0] || window.event 31 var elementevt.srcElement || evt.target //在 ie和ff下 取得 btn3对象 32 alert(element.id) // btn3 33 } 34 /script 35 看到这里我们似乎对 ie和ff的事件处理方式都已经理解了并找到了解决的办法。 但是。。。。事情还没有结束。 看代码 button idbtn οnclickfoo()按钮1/button script function foo(){ alert(arguments[0] || window.event) } /script 很不幸我们 foo给我们的结果是 undefined, 而不是期望的 object 原因在于 事件绑定的方式 οnclickfoo() 就是直接执行了 foo() 函数,没有任何参数的 这种情况下 firefox没有机会传递任何参数给foo 而 btn.οnclickfoo 这种情况 因为不是直接执行函数firefox才有机会传参数给foo 解决方法 方法一比较笨的方法既然 firefox没有机会传参数那么自己勤快点自己传 button idbtn οnclickfoo(event)按钮/button script function foo(){ alert(arguments[0] || window.event) var evtarguments[0] || window.event var elementevt.srcElement || evt.target alert(element.id) } /script 方法二 自动查找 1 button idbtn4 οnclickfoo4()按钮4/button 2 3 script 4 5 function foo4(){ 6 var evtgetEvent() 7 var elementevt.srcElement || evt.target 8 alert(element.id) 9 } 10 11 function getEvent(){ //同时兼容ie和ff的写法 12 if(document.all) return window.event; 13 funcgetEvent.caller; 14 while(func!null){ 15 var arg0func.arguments[0]; 16 if(arg0){ 17 if((arg0.constructorEvent || arg0.constructor MouseEvent) 18 || (typeof(arg0)object arg0.preventDefault arg0.stopPropagation)){ 19 return arg0; 20 } 21 } 22 funcfunc.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 funcSearchEvent.caller; 8 while(func!null) 9 { 10 var arg0func.arguments[0]; 11 if(arg0) 12 { 13 if(arg0.constructorEvent) 14 return arg0; 15 } 16 funcfunc.caller; 17 } 18 return null; 19} 简单总结 以上两个解决方法中都正确处理 ff和ie下 的事件处理 不管是οnclickfoo(),方式还是 οnclickfoo方式 但是个人建议用 getEvent() 方法来统一处理 事件问题。 该文章转载自脚本之家http://www.jb51.net/html/200704/23/9401.htm