綁定事件、阻止默認事件、阻止冒泡

一、綁定事件
ie6-8 :attachEvent (事件名,函數名);事件名+on
ie9以上也支持addEventListener

標準下:addEventListener(事件名,函數名,false);事件名無on,false表示冒泡階段調用事件處理函數,true則是捕獲階段

綁定事件的問題:1、參數不一樣
2、是否加on
3、執行順序
4、this指向問題(ie6-10,this指向window;addEventListener中指向所屬元素)

利用call和apply改變this指向:
call()第一個參數是函數中this的指向,第二個參數開始就是函數的實際參數。
例子:

oDiv.οnclick=function(){
    show.call(oDiv,'red')
}
function show(val){
    this.style.background=val
}

如果是用apply(this,[‘red’]),第一個參數與call一樣,第二個參數是一個數組

兼容處理:

 function bindEvent(obj,events,fn){
    if(obj.addEventListener){
        obj.addEventListener(events,fn,false)
    }else{
        obj[fn]=function(){
            fn.call(obj)
        }
        obj.attachEvent('on'+events,obj[fn])
      }

}

二、阻止默認事件

function preDefault(ev){  //是傳進來的,ev=ev || window.event;
        if(ev.preventDefault){
            ev.preventDefault();  //(w3c綁定事件)
        }else{
            ev.returnValue=false;  //ie6-8
            return false;  //普通事件
        }

    }

三、阻止冒泡

ev.cancelbubble=true //非標準的方法
ev.stopPropagation(); //非標準方法,有兼容問題,不兼容ie8及以下

發佈了61 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章