设为首页 - 加入收藏 大理站长网 (http://www.0872zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 区块 数据 如何 企业
当前位置: 首页 > 亚博2018足彩 > 模式 > 正文

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

发布时间:2018-10-26 02:01 所属栏目:[模式] 来源:站长网
导读:亚博2018足彩在javascript开发中我们会经常获取页面中的事件对象,然后来处理这些事件,例如下面的getEvent函数就是获取javascript下的页面事件对象。 Copy to Clipboard 引用的内容:[www.veryhuo.com]function getEvent(event){ return event || window.event; } 我

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

Copy to ClipboardLiehuo.Net Codes引用的内容:[www.veryhuo.com] function getEvent(event){
return event || window.event;
}

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

Copy to ClipboardLiehuo.Net Codes引用的内容:[www.veryhuo.com] function foo(event){
var evt = getEvent(event);
alert(evt);
}

并且把foo函数绑定到一个onclick事件上。
但是常用的是foo函数不会有参数,或者第一个参数没有传入,我们可以通过arguments[0]来获取第一个参数。
在IE中event是一个全局变量,即window.event,而在Firefox等浏览器,事件会作为第一个参数传入foo函数,所以getEvent可以改为:

Copy to ClipboardLiehuo.Net Codes引用的内容:[www.veryhuo.com] function getEvent(event){
return arguments[0] || window.event;
}

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

Copy to ClipboardLiehuo.Net Codes引用的内容:[www.veryhuo.com] function onclick(event) {
foo();
}

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

我们知道arguments.callee是函数本身,在匿名函数中可以作为递归使用,那么arguments.callee.caller指的是调用本函数的上一级函数的函数。
例如getEvent的caller为foo,foo的caller为onclick,依次类推……

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

Copy to ClipboardLiehuo.Net Codes引用的内容:[www.veryhuo.com] 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);
}

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章