事件处理程序2

109 阅读1分钟

<div style="width:100px;height:100px;border-radius:50%;background-color:brown"></div> <script type="text/javascript">

一、事件处理程序的运行环境

var div=document.getElementsByTagName('div')[0];

1.1ele.onxxx=function(event){}

程序tihs指向dom元素本身

 div.onclick=function(){
     console.log(this);
 }//div

// 1.2.obj.addEventListener(type,fn,false);

// 程序tihs指向dom元素本身

 div.addEventListener('click',function(){
     console.log(this)
 },false);//div

1.3.obj.attachEvent('on'+type,fn);

程序指向window

让程序指向div

div.attachEvent('onclick',function(){
    handle.call(div);
});
function handle(){
//     // this.指向div
//     // 事件处理程序
}
**封装兼容性的addEvent(elem,type,handle);方法
 function addEvent(elem,type,handle) {
     if(elem.addEventListener) {
         elem.addEventListener(type,handle,false);
     }else if(elem.attachEvent) {
         elem.attachEvent('on'+type,function(){
             handle.call(elem);
         })
     }else{
         elem['on'+type] = handle;//ele.on-xxx=function(event){}
     }
 }

二、 解除事件处理程序

var div=document.getElementsByTagName('div')[0];

2.1 ele.onclick=false/''/null;

 div.onclick = function(){
     console.log('a');
     this.onclick=null;//点击一次后失效
 }
 div.onclick = null;让事件失效

2.2 ele.removeEventListener(type,fn,false);

 div.addEventListener('click',test,false);
 function test(){//给函数命名
     console.log('a');
 }
 div.removeEventListener('click',test,false);//绑定的是一个对象的特定的事件类型的特定处理函数

2.3 ele.detachEvent('on'+type,fn);

如果绑定匿名函数,则无法解除