一、綁定事件
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及以下