您的位置:首页 > Web前端 > JavaScript

js之event对象获取在FF和IE下的区别

2011-10-25 11:13 567 查看
摆脱各种库之后,我从代码中获取了更多的乐趣,编程能力也快速的提升。毫无疑问,各种问题也接踵而至。对于自成标准的IE,我始终向它投去钦佩的目光。我觉得一个人的学习成长和他的老师以及他的眼界密切相关,很庆幸我的老师之一是互联网,但是从这瀚海之中提取有用的知识,对新人来说并非易事。感谢那些才华横溢善于思考又愿意分享的前辈,我虽无才华,也愿意把实际经验分享出来,供新人参考和交流。

从我想给搜索框绑定一个“Enter”键便开始查询的事件开始。

我用了最传统的事件注册的办法:

var seat = document.getElementById("seat");//这是一个搜索输入框

seat.onkeydown = function(e){

var eve = (window.event)?window.event:e;

if(eve.keyCode == 13)//回车键

msea();//另一个函数

}

问题在第三行的地方,event对象在W3C和IE的模型中是不一样的。

在w3c的模型中,事件对象作为第一个参数被传递到当前事件的处理程序中;

在IE的模型中,事件的对象总是window.event。

firefox紧跟w3c标准,chrome则两者都支持。
所以第三行的三目运算符,若浏览器支持window.event[IE和chrome支持]则返回window.event,否则返回传入的参数e。

至此,跨越第一道门,兼容的获取到了不同浏览器的event对象。
我使用了一个匿名函数来注册事件,在有些情况下,这么做是一种很不错的选择。
还可以直接添加到html元素中作为一个属性:

function enter(e){

var eve = (window.event)?window.event:e;//可以去掉

if(eve.keyCode == 13)//回车键

msea();//另一个函数

}

<input id="seat" type="text" onkeydown="enter(event)"/>

这种情况下,传入的“event”参数就是当前的事件对象,也就不存在兼容性问题了,于是第二行处理w3c和IE间的兼容也就不需要了。这种直接写到html里的做法还能传入一个强大的参数“this”,js的this也很给力额,如果某次你发现自己怎么也找不到“this”了,那么这种办法暂时会是不错的选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: