首页 > 代码库 > javascript-事件处理

javascript-事件处理

前言:

click,load,mouseover都是事件的名字

而onclick,onload,onmouseover则是响应事件的事件处理程序

 

javascript事件处理有以下几种处理方式

1.HTML事件处理程序  

  <input type=‘button‘ value=http://www.mamicode.com/‘点击我‘ onclick=‘alert(‘啊!被你击中了‘)‘/>

2.Dom0级事件处理程序

  <input type=‘button‘ value=http://www.mamicode.com/‘点击我‘ id=‘myBtn‘/>

  var btn =document.getElementById(‘myBtn‘);

  btn.onclick=function(){

    alert(‘啊!再次被击中了,这次是Dom0事件‘);

  }

3.Dom1级事件处理程序

  没有!!!直接就是Dom2,鬼知道为什么。

3(真正的第3种)Dom2级事件处理程序

  <input type=‘button‘ value=http://www.mamicode.com/‘点击我‘ id=‘myBtn‘/>  

  var btn =document.getElementById(‘myBtn‘);

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

  alert(‘第三次被击中,Dom2放学别走‘);

  },false);

  false:代表将事件处理程序添加到事件流的冒泡阶段,可以最大程度的兼容浏览器。

  如果要删除该事件处理程序,则调用

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

  alert(‘第三次被击中,Dom2放学别走‘);

  },false);

  上面的addEventListener()和removeEventListener()函数,第二个参数看似一样,实则是两个不同的匿名函数。要解决这个问题,则需要

  var handler=function(){

  alert(‘第三次被击中,Dom2放学别走‘);

  }

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

  btn.removeEventListener(‘click‘,handler,false);

4.IE事件处理程序

  由于我们IE浏览器逆天的不兼容性,IE自己造了两个事件处理程序函数。

  <input type=‘button‘ value=http://www.mamicode.com/‘点击我‘ id=‘myBtn‘/>  

  var btn =document.getElementById(‘myBtn‘);

  var handler=function(){

  alert(‘第三次被击中,Dom2放学别走‘);

  }

  btn.attachEvent(‘oncick‘,handler);

  删除事件操作

  btn.detachEvent(‘onclick‘,handler);

5.前方高能,大Boss来袭..

   为了解决跨浏览器的问题,而不是在项目里面一下子使用DOM事件处理程序,一下子是IE事件处理程序

   我们写一个对象 EventUtil,对象字面量法为其添加属性,写完它之后,跨浏览器就可以一劳永逸。

   var EventUtil = {

    addHandler: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;

        }

    removeHandler: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;

        }

          }

 

6.跨浏览器的事件对象

前面介绍的是跨浏览器事件处理程序

接下来要介绍的跨浏览器事件对象,IE中event对象的全部信息和方法Dom对象中都有,但是实现方式不一样。

还是刚才的那个对象EventUtil

var EventUtil={

  getEvent:function(event){

    return event?event:window.event;

  },

  getTarget:function(event){

    return  event.target||event.srcElement;

  },

  preventDefault:function(event){

     if(event.preventDefault){

      event.preventDefault();

     }else{

      event.returnValue=http://www.mamicode.com/false;

     }

}

    

 

  

javascript-事件处理