注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

isblog主页

或许不一定要做得最多,但一定要做得最好! 能力就是一种财富,积累越多,就越体现你

 
 
 

日志

 
 

javascript事件:获取事件对象getEvent函数  

2012-12-05 14:32:54|  分类: jquery学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在javascript开发中我们会经常获取页面中的事件对象,然后来处理这些事件,例如下面的getEvent函数就是获取javascript下的页面事件对象。


function getEvent(event){

return event || window.event;

}

我们使用getEvent的时候可以这样调用。


function foo(event){

var evt = getEvent(event);

alert(evt);

}

并且把foo函数绑定到一个onclick事件上。

但是常用的是foo函数不会有参数,或者第一个参数没有传入,我们可以通过arguments[0]来获取第一个参数。

在IE中event是一个全局变量,即window.event,而在Firefox等浏览器,事件会作为第一个参数传入foo函数,所以getEvent可以改为:


function getEvent(event){

return arguments[0] || window.event;

}

这时在一些版本的浏览器,例如Firefox 中会出现获取不到event对象的问题,其实我们可以看成事件的触发是下面的方式:


function onclick(event) {

    foo();

}

这样,第一个函数是onclick,即event会默认作为第一个参数传入,而foo函数没有将event作为参数传入,这样严重限制了getEvent的灵活性,所以我们需要修改下getEvent函数。


我们知道arguments.callee是函数本身,在匿名函数中可以作为递归使用,那么arguments.callee.caller指的是调用本函数的上一级函数的函数。

例如getEvent的caller为foo,foo的caller为onclick,依次类推……


所以我们的getEvent函数最终可以这样来写:


function getEvent(){

if(window.event){

return window.event;

}

var f = arguments.callee.caller;

do{

var e = f.arguments[0];

if(e && (e.constructor === Event || e.constructor===MouseEvent || e.constructor===KeyboardEvent)){

return e;

}

}while(f=f.caller);

}

声明:文章未声明为原创文章,本文链接 http://js8.in/703.html. 转载请注明转自 JS8.IN ?

  评论这张
 
阅读(610)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018