Skip to content

Instantly share code, notes, and snippets.

@zhuping
Last active August 29, 2015 13:57
Show Gist options
  • Save zhuping/9442915 to your computer and use it in GitHub Desktop.
Save zhuping/9442915 to your computer and use it in GitHub Desktop.
事件监听学习笔记

###监听事件

1、绑定事件监听函数


function addEventHandler(target, type, func) {
    if (target.addEventListener) {

    	// Chrome、FireFox、Opera、Safari、IE9.0
        target.addEventListener(type, func, false);
    } else if (target.attachEvent) {

    	// IE8.0及其以下版本
        target.attachEvent("on" + type, func);
    } else {
    	
    	// 早期浏览器
    	target["on" + type] = func;
    }
}

2、移除事件监听函数


function removeEventHandler(target, type, func) {
    if (target.removeEventListener) {
        target.removeEventListener(type, func, false);
    } else if (target.detachEvent) {
        target.detachEvent("on" + type, func);
    } else {
    	delete target["on" + type];
    }
}

###事件顺序

Netscape 4支持事件捕捉 (capturing),从顶层的父节点开始触发事件,从外到内转播。

微软则支持事件冒泡 (bubbling),从最内层的节点开始触发事件,逐级冒泡直到顶层节点,从内向外传播。

我认为事件冒泡看起来更合理一些,这也是我们日常开发所用的事件模型。W3C对此做了让步,将对这两种事件模型的支持都加入了标准规范之中。根据W3C模型,事件首先被目标元素所捕捉,然后向上冒泡。

你可以自行选择要注册的事件处理程序的调用类型,捕捉或冒泡,通过给addEventListener()传入第3个参数useCapture来设置。如果addEventListener()的最后一个参数是true,事件处理程序以捕捉模式触发;如果是false,事件处理程序以冒泡模式触发:


// 给最后一个参数传入false,来设置时间冒泡
button.addEventListener("click", function() {/* ... */ }, false);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment