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

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

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

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

  1. var seat = document.getElementById("seat");//这是一个搜索输入框
  2. seat.onkeydown = function(e){
  3. var eve = (window.event)?window.event:e;
  4. if(eve.keyCode == 13)//回车键
  5. msea();//另一个函数
  6. }
问题在第三行的地方,event对象在W3C和IE的模型中是不一样的。
  1. 在w3c的模型中,事件对象作为第一个参数被传递到当前事件的处理程序中;
  2. 在IE的模型中,事件的对象总是window.event。
firefox紧跟w3c标准,chrome则两者都支持。
所以第三行的三目运算符,若浏览器支持window.event[IE和chrome支持]则返回window.event,否则返回传入的参数e。
至此,跨越第一道门,兼容的获取到了不同浏览器的event对象。
我使用了一个匿名函数来注册事件,在有些情况下,这么做是一种很不错的选择。
还可以直接添加到html元素中作为一个属性:
  1.  function enter(e){
  2. var eve = (window.event)?window.event:e;//可以去掉
  3. if(eve.keyCode == 13)//回车键
  4. msea();//另一个函数
  5. }
<input id="seat" type="text" onkeydown="enter(event)"/>

这种情况下,传入的“event”参数就是当前的事件对象,也就不存在兼容性问题了,于是第二行处理w3c和IE间的兼容也就不需要了。这种直接写到html里的做法还能传入一个强大的参数“this”,js的this也很给力额,如果某次你发现自己怎么也找不到“this”了,那么这种办法暂时会是不错的选择。

posted @ 2011-10-25 11:13  xiaoc001  阅读(631)  评论(0编辑  收藏  举报