| 老IE瀏覽器 | 新版本IE和非IE瀏覽器 | |
|---|---|---|
| 事件綁定 | node.attrachEvent('onclick',fn) | node.addEventListener('click',fn,false) |
| 解除事件綁定 | node.detachEvent('onclick',fn) | node.removeEventListener('click',fn,false) |
| 阻止事件冒泡 | e.cancelBubble=true | e.stopPropagation() |
| 阻止默認(rèn)事件 | e.returnValue=true | e.preventDefault() |
| 點(diǎn)擊對象 | e.srcElement.innerText | e.target.innerText |
| this指的是什么? | window | node |
node.addEventListener('click',fn,false) 里面的false表示監(jiān)聽只在冒泡階段執(zhí)行,默認(rèn)為false,zz設(shè)置為true是捕獲階段執(zhí)行
事件兼容這么麻煩~
怎么辦呢? 使用原生js只有封裝?。。?/h5>
事件綁定(統(tǒng)一this指向node):
function addEvent(node,type,handler){
if(!node) return false;
if(node.addEventListener){
node.addEventListener(type,handler,false);
return true;
}
if(node.attrachEvent){
node['e'+type+handler]=handler;
node[type+handler]=function(){
node['e'+type+handler]=handler(window.event);
}
node.attrachEvent("on"+type,node[type+handler]);
return true;
}
return false;
}
解除事件綁定
在使用上一個(gè)事件綁定封裝函數(shù)的基礎(chǔ)上使用下面這個(gè)解除事件綁定封裝函數(shù)
function removeEvent(node,type,handler){
if(!node) return false;
if(node.removeEventListener){
node.removeEventListener(type,handler,false);
return true;
}
if(node.detachEvent){
node.detachEvent("on"+type,node[type+handler]);
node[type+handler]=null;
return true;
}
return false;
}
function getEvent(e){
return e||window.event;
}
阻止事件冒泡
function stopPropagation(e){
if(e.stopPropagation){
e.stopPropagation();
}else{
e.cancelBubble=true;
}
}
阻止默認(rèn)事件
function preventDefault(){
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue=true;
}
}
點(diǎn)擊的目標(biāo)對象:
function target(){
return e.target||e.srcElement;
}