函数怎么传event对象
来源:互联网 发布:java用户信息管理系统 编辑:程序博客网 时间:2024/06/08 08:59
兼容 DOM 的浏览器会将一个 event 对象传入到事件处理程序中。无论指定事件处理程序时使用什么方法(DOM1 级或 DOM2 级),都会传入 event 对象。下面是一个event对象传递的小例子:
var btn = document.getElementById("myBtn");btn.onclick = function(event){ console.log(event.type); // "click"};btn.addEventListener("click", function(event){ console.log(event.type); // "click"}, false);
注意:IE中,不支持直接接收,而是通过window.event来接收
对于跨浏览器事件处理方式来说,,那么现在问题来了,如下所示,如果事件处理程序handler()(或者其它DOM2级事件处理程序)需要传入event对象,怎么办??
function handler(event,arg){ var event = event?event:window.event; alert(event.type); alert(arg);}
像这样直接在addHandler()中的第三个参数也加入包含event的参数列表可不可以呢?EventUtil.addHandler(btn,"onclick",handler(event,arg));
没错,,答案是确实不可以。。那是为什么呢?
因为在DOM中,event对象只能作为仅有的参数传给事件处理程序!!也就是说,在普通函数(自定义事件处理函数)中,是不可以传递event对象的!
所以,,EventUtil.addHandler(btn,"onclick",handler(event,arg)); 并不能把event对象传递到handler事件处理程序中。
这特么就很尴尬了,那该怎么办呢?
事件处理程序的参数传递问题的解决方式有以下几种:
* 不保留事件对象直接传入参数
var btn=document.getElementById("myBtn");function handler(arg1,arg2){ alert(arg1); alert(arg2);}E.addHandler( btn,"click",handler(arg1,arg2));
* 保留事件对象作为第一个参数
var btn=document.getElementById("myBtn");function handler(event,arg1,arg2){ alert(event.type); alert(arg1); alert(arg2);}E.addHandler( btn,"click",function(event){handler(event,arg1,arg2);} );
缺点: 对事件处理函数包装后,移除事件的时候会变得麻烦。
* 给Function.prototype添加getCallback方法,不保留事件对象
var btn=document.getElementById("myBtn");Function.prototype.getCallBack = function(){ var _this = this, args = arguments; //arguments是包含传入函数中的所有参数的数组 return function(event) { return _this.apply(this || window, args); };}E.addHandler(btn,"click",handler.getCallBack([args])); //[args]表示参数列表
* 给Function.prototype添加getCallBack()方法,保留事件对象作为第一个参数传入
var btn=document.getElementById("myBtn");Function.prototype.getCallBack = function(){ var _this = this, args = arguments; return function(event) { args.unshift(event); return _this.apply(this || window, args); };}E.addHandler(btn,"click",handler.getCallBack([args]));
缺点:给Function的原型添加自定义方法后,污染了原生JS,慎用!
阅读全文
1 0
- 函数怎么传event对象
- event对象
- Event 对象
- Event 对象
- Event对象
- event对象
- Event 对象
- Event对象
- Event 对象
- event 对象
- event对象
- Event对象
- Event对象
- 火狐浏览器中函数获取event的对象
- Event事件对象之Event
- js对象,Event对象
- HTML DOM Event 对象(Event 对象)
- Qt 画图,void A::paintEvent(QPaintEvent *event){..}这函数怎么调用它?
- 5分钟搞定内存字节对齐
- MyEclipse插件:反编译插件安装使用
- 基于java jdk1.8 编写的webservice
- T-SQL语句训练
- 深入理解javascript原型和闭包(17)——补充:上下文环境和作用域的关系
- 函数怎么传event对象
- 指令笔记
- mongo
- Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
- 《maven实战》_仓库_笔记
- SVN导入项目的时候报错
- 20171117
- Codeforces Round #446 (Div. 2) E. Envy
- 【云计算的1024种玩法】使用 NAS 文件储存低价获得好磁盘性能