100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > firefox 和 ie 事件处理的细节 研究 再研究 书写同时兼容ie和ff的事件处理代码【javascript】

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

时间:2021-09-15 02:25:25

相关推荐

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

web前端|js教程

firefox,ie,事件处理

web前端-js教程

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

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

详细说明一下

打企鹅小游戏源码,vscode接口测试插件,ubuntu 创建raid,tomcat服务是,sqlite 取某列值,我的世界爬虫怎么升级最快,php数据库添加数据,南庄seo优化方法,装修门户网站程序 cms,网页游戏源码源码,帝国cms7.2后台模板lzw

window.onload=function(){

document.getElementById("btn1").onclick=foo1

document.getElementById("btn2").onclick=foo2

document.getElementById("btn3").onclick=foo3

}

function foo1(){

//ie中, window.event使全局对象

alert(window.event) // ie下,显示 "[object]" , ff下显示 "undefined"

//ff中, 第一个参数自动从为 事件对象

alert(arguments[0]) // ie下,显示 "undefined", ff下显示 "[object]"

}

function foo2(e){

alert(window.event) // ie下,显示 "[object]" , ff下显示 "undefined"

//注意,我从来没有给 foo2传过参数哦。 现在 ff自动传参数给 foo2, 传的参数e 就是事件对象了

alert(e) // ie下,显示 "undefined", ff下显示 "[object]"

}

function foo3(){ //同时兼容ie和ff的写法,取事件对象

alert(arguments[0] || window.event) // ie 和 ff下,都显示 "[object]"

var evt=arguments[0] || window.event

var element=evt.srcElement || evt.target //在 ie和ff下 取得 btn3对象

alert(element.id) // btn3

}

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

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

看代码

活动源码,vscode如何多光标,ubuntu 缩短名字,tomcat限制主机访问,爬虫讨论,php fopen 编码,东莞seo网络优化方法,任务网站源码下载,.net登录样式模板下载lzw

function foo(){

alert(arguments[0] || window.event)

}

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

原因在于 事件绑定的方式

onclick=”foo()” 就是直接执行了, foo() 函数,没有任何参数的,

这种情况下 firefox没有机会传递任何参数给foo

而 btn.onclick=foo 这种情况, 因为不是直接执行函数,firefox才有机会传参数给foo

解决方法:

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

手机qq空间盗号源码,vscode保存运行,ubuntu mit,tomcat pom插件,sqlite3 obdc,ecshop支付宝插件下载,前端框架心得体会,公园中常见的爬虫,php if 变量作用域,凌海seo优化价格,html搭建网站,动画按钮 网页设计,人流价格网页专题 模板样式lzw

function foo(){

alert(arguments[0] || window.event)

var evt=arguments[0] || window.event

var element=evt.srcElement || evt.target

alert(element.id)

}

方法二: 自动查找

function foo4(){

var evt=getEvent()

var element=evt.srcElement || evt.target

alert(element.id)

}

function getEvent(){ //同时兼容ie和ff的写法

if(document.all) return window.event;

func=getEvent.caller;

while(func!=null){

var arg0=func.arguments[0];

if(arg0){

if((arg0.constructor==Event || arg0.constructor ==MouseEvent)

|| (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation)){

return arg0;

}

}

func=func.caller;

}

return null;

}

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

function SearchEvent()

{

//IE

if(document.all)

return window.event;

func=SearchEvent.caller;

while(func!=null)

{

var arg0=func.arguments[0];

if(arg0)

{

if(arg0.constructor==Event)

return arg0;

}

func=func.caller;

}

return null;

}

简单总结:

以上两个解决方法中,都正确处理 ff和ie下 的事件处理 (不管是onclick=”foo()”,方式还是 onclick=foo方式)

但是个人建议用 getEvent() 方法来统一处理 事件问题。

先写到这里,大家继续。。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。