javascript事件:获取事件对象getEvent函数
2011-08-21 16:15
761 查看
在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); }
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); }
相关文章推荐
- javascript中函数事件触发和Obj对象获取
- javascript事件:获取事件对象getEvent函数
- JavaScript事件event对象属性
- 巧用javascript对象属性,向事件绑定的匿名函数内传递循环控制变量的值
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- 用 javascript 获取当页面上鼠标(光标)位置 和 触发事件的对象 的方法
- JavaScript-4.6鼠标事件监听,获取鼠标坐标window.event---ShinePans
- javascript event(事件对象)详解
- javascript获取函数名称、函数参数、对象属性名称的代码实例
- getevent获取input上报事件
- javascript 事件模型 及 event对象属性总结
- JavaScript Date对象 日期获取函数
- 如何区分javascript中的方法(method)、函数(function)、事件(event)三个概念?
- jquery获取任意点击到的对象,绑定点击函数event.target 不能用this
- 火狐浏览器中函数获取event的对象
- javascript 事件对象(event 对象)
- php版getElementsByTagName , php版根据标签名获取 标签节点列表.模拟javascript的getElementsByTagName函数
- 怎么样用javascript获取触发事件的对象
- 【实例】javascript中使用event.target获取触发该事件标签的相关数据而不是通过document