加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2017-12-19 09:24:48)
分类: JS开发笔记
1、在JS开发中常常需要获取页面中的事件对象,然后来处理这些事件,因此,可以定义一个函数getEvent()来 获取:
function getEvent(event) { 
 return event || window.event; 
}
接下来就可以进行检验,当我们调用该函数时是否可以获取:
http://s8/mw690/006pePUEzy7gH7S4usn77&690
注意:test中的event可以省略
查看结果:
http://s6/mw690/006pePUEzy7gH7Xh38N35&690

显然,获取到了,对于click事件,明显是属于鼠标事件范畴的。

2、从1的运行来看,test函数带有参数,一般而言,该函数不会有参数,或不会有参数传入,那么,我们如何获取第一个参数呢?应当知道,函数的所有参数都存放在对象arguments中,因此我们可以通过arguments[0]来获取函数的第一个参数。值得注意的是,在IE浏览器中,event作为全局变量,通过window是可以直接引用到的,而在其他浏览器中,事件会作为第一个参数传入函数中,故接下来就可以这样更改getEvent函数:

结果:

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

首先,可以检测window.event的值:

所以我们的getEvent函数最终可以这样来写:
function getEvent() {
    if (window.event) {
        return window.event;
    }
    var func = arguments.callee.caller;
    do{
        var eve=func.arguments[0];
        if(eve&&(eve.constructor==event||eve.constructor==MouseEvent||eve.constructor==KeyboardEvent)){
            return eve;
        }
    }while(func=func.caller)
}
调用:

结果:


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有