首页 > 代码库 > DOM事件处理程序

DOM事件处理程序

  DOM事件处理程序:DOM0级事件处理程序、DOM2级事件处理程序

 

DOM0级事件处理程序:

  例如:var btn  =  document.getElementById(‘myBtn‘);

      btn.onclick = function(){
        //事件处理逻辑
      }

      通过btn.onclick =null;  可以删除事件处理程序

 

 

DOM2级事件处理程序:

  例如:var btn = document.getElementById(‘myBtn‘);

     btn.addEventListener(‘click‘,function(){

        //事件处理逻辑     

      },false);

说明:

  addEventListener:添加事件处理,接收三个参数:1、事件类型名  2、事件处理函数  3、布尔值 ——true:表示在捕获阶段调用事件处理程序,false:表示在冒泡阶段调用事件处理,使用addEventListener()可以添加多个事件相同类型的事件,会按照顺序执行。

  removeEventListener:移除事件处理程序,参数与添加处理程序使用的参数相同,有一点需要注意,无法移除匿名函数,所以在添加事件处理函数和移除事件处理函数的函数名要是同一个

  例如:var btn = document.getElementById(‘myBtn‘);

    var hander = function(){
      alert(this.id);
    }

    btn.addEventListener(‘click‘,hander ,false);

    btn.removeEventListener(‘click‘,hander,false)

 

 

IE8及更早版本/Opera浏览器事件处理程序:

  通过attachEvent() 和 detachEvent()两个方法实现。两个方法接收的参数相同:事件处理程序名称和事件处理程序的函数

  注意:在使用attachEvent()与使用ODM0级方法的主要区别在于事件处理程序的作用域。在使用ODM0级方法的情况下,事件处理程序会在其所属元素的作用域内运行;在使用attachEvent()方法的情况下,事件处理程序在全局作用域中运行,因此this 等于window

例如:var btn =document.getElementById(‘myBtn‘);

    var hander = function(){
      //事件处理逻辑

    }

    btn.attachEvent(‘onclick‘,hander);

    btn.detachEvent(‘onclick‘,hander);

 

 

可跨浏览器的事件处理程序

 要保证处理事件的代码能在大多数浏览器下一致地运行,只需要关注冒泡阶段。如下处理方法,接收三个参数(要操作的元素、事件名称、事件处理函数)

var EventUtil = {
  addHandle : function (element, type, handler) {
    if (element.addEventListener) {
      element.addEventListener(type,handler,false);
    }else if(element.attachEvent){
      element.attachEvent("on"+type,handler);
    }else{
      element["on"+type] = handler;
    }

  },
  removeHandle:function(element,type,handler){
      if (element.removeEventListener) {
        element.removeEventListener(type,handler,false);
      }else if(element.detachEvent){
        element.detachEvent("on"+type,handler);
      }else{
        element["on"+type] = null;
     }
  }
}

 

DOM事件处理程序