关于 addEventListener 和 handleEvent 方法
使用 addEventListener 可以绑定事件,并传入回调函数。
Mozilla 0.9.1 和 Netscape 6.1 之后的版本不但支持传递函数引用,也都允许直接把拥有 handleEvent 方法的对象作为 addEventListener 方法的第二参数。
这在 DOM Level 2 的接口定义中也已经做了说明:
http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventListener
利用这个特性可以把任意对象注册为事件处理程序,只要它拥有 handleEvent 方法。
var o = {
    handleEvent : function () {
        alert('handleEvent executed');
    }
};
element.addEventListener('click', o, false);
当定义对象封装的时候,可以直接将 this 指针传入:
var o = {
    bind : function () {
        element.addEventListener('click', this, false);
    },
    handleEvent : function () {
        alert('handleEvent executed');
    }
};
IE9 是 IE 家族中第一个支持 addEventListener + handleEvent 的浏览器,IE9 之前的版本连 addEventListener 也没能支持。需要通过属性探测解决兼容问题:
function on(el, ev, fn, bubble) {
    if(el.addEventListener) {
        try {
            el.addEventListener(ev, fn, bubble);
        }
        // 黑莓等系统不支持 handleEvent 方法
        catch(e) {
            if(typeof fn == 'object' && fn.handleEvent) {
                el.addEventListener(ev, function(e){
                    //以第一参数为事件对象
                    fn.handleEvent.call(fn, e);
                }, bubble);
            } else {
                throw e;
            }
        }
    } else if(el.attachEvent) {
        // 检测参数是否拥有 handleEvent 方法
        if(typeof fn == 'object' && fn.handleEvent) {
            el.attachEvent('on' + ev, function(){
                fn.handleEvent.call(fn);
            });
        } else {
            el.attachEvent('on' + ev, fn);
        }
    }
}
完。
参考资料:
关于 addEventListener 和 handleEvent 方法的更多相关文章
- addEventListener之handleEvent
		
addEventListener() 方法是将指定的事件监听器注册到目标对象上,当该对象触发指定的事件时,指定的回调函数就会被执行.语法: element.addEventListener(type, ...
 - AS3.0 给addEventListener里的方法加上参数传递
		
方法一:for(var i:int=1;i<=4;i++){this["btn"+i].addEventListener(MouseEvent.CLICK,EventUp(b ...
 - attachEvent和addEventListener 的使用方法和区别
		
attachEvent方法,为某一事件附加其它的处理事件.(不支持Mozilla系列)addEventListener方法 用于 Mozilla系列document.getElementById(&q ...
 - [转]addEventListener() 方法,事件监听
		
转载 白杨-M http://www.cnblogs.com/baiyangyuanzi/p/6627401.html addEventListener() 方法,事件监听 你可以使用 remov ...
 - JavaScript addEventListener()事件监听方法
		
addEventListener()方法将事件处理程序附加到指定的元素. addEventListener()方法将事件处理程序附加到元素,而不覆盖现有的事件处理程序. 您可以向一个元素添加许多事件处 ...
 - addEventListener() 方法,事件监听(去哪儿网用到过)
		
addEventListener() 方法,事件监听 你可以使用 removeEventListener() 方法来移除事件的监听. 语法 element.addEventListener(event ...
 - addEventListener 的另类写法
		
addEventListener 参数如下 addEventListener(type, listener[, useCapture]); type,事件名称 listener,事件处理器 useCa ...
 - javascript 对象中的  handleEvent
		
在高级浏览器中,我们在绑定事件的时候 可以知道绑定一个对象,然后在这个对象中的 handleEvent 方法会自动进入指定的方法,不多说了举个例子吧!! var events = { handleEv ...
 - 【译】addEventListener 第二个参数
		
这是原文链接:Our Backwards DOM Event Libraries 浏览器APIs 先简单回顾一下各个浏览器提供了哪些绑定事件的接口. IE浏览器提供了element.attachEve ...
 
随机推荐
- brew 更换国内源(镜像)
			
cd /usr/local git remote set-url origin git://mirrors.tuna.tsinghua.edu.cn/homebrew.git brew update ...
 - set{变量 = value;}get{return 变量;}
			
形如: public string _customValue { set { _customValue = value; } get { re ...
 - laravel实现发送qq邮件
			
首先修改config/mail.php 'from' => [ 'address' => 'hello@example.com', 'name' => 'Example', ], 修 ...
 - C C++ OC iOS面试重点问题(一)
			
C C++ OC iOS面试重点问题(一) 1.字符串常量需要加\0 2.逻辑运算 位操作(经典:实现两个数的交换) 3.关键字 4.引用和指针的区别和联系 5.如何引用一个已经定义过的全局变量? ...
 - .a静态库的注意事项
			
.a静态库 生成的时候 可以分为 debug 版本 和 release 版本. debug:速度比较慢,比较耗性能.会启动更多的 Xcode 系统监控功能. 对错误的敏感度不高. re ...
 - 关于zMPLS的设计解析
			
zMPLS是一个关于mpls标准实现的开源软件,它起源于2002年6月份,项目终止于2006年,目前它已经可以支持ipv6,ipv4,ldp,cr-ldp,rsvp,rsvp-te等MPLS协议簇.该 ...
 - 智能卡 APTU命令
			
一条命令APDU含有一个头标和一个本体.本体可有不同长度,或者在相关数据字段为空时,整个可以不存 在. 头标由四个数据元组成,它们是类CLA(ClAss)字节,命令INS(INStructic,n)字 ...
 - Delphi - GetUserNameEx(学一下导出Windows API,以及Array Char充当缓冲区的用法,下标必须从零开始)
			
(* * Author : http://www.michael-puff.de * Date : 2006-03-29 * License : PUBLIC DOMAIN *) function G ...
 - CentOS6.5切换 语言(附带6.5官方下载地址)
			
1 在终端中输入命令[sudo vim /etc/sysconfig/i18n]来编辑i18n文件, 2 把“zh_CN.UTF-8”修改为“en_US.UTF-8”, 3 保存修改并退出,如果提示这 ...
 - 【转】使用 vim + ctags + cscope + taglist 阅读源码
			
原文网址:http://my.oschina.net/u/554995/blog/59927 最近,准备跟学长一起往 linux kernel 的门里瞧瞧里面的世界,虽然我们知道门就在那,但我们还得找 ...