普及:瀏覽器的兼容性問題,往往是個(gè)別瀏覽器(沒錯(cuò)蓝厌,就是那個(gè)與眾不同的瀏覽器)對(duì)于一些標(biāo)準(zhǔn)的定義不一致導(dǎo)致的吐限。俗話說:沒有IE就沒有傷害。
內(nèi)容都是自己總結(jié)的褂始,不免會(huì)出現(xiàn)錯(cuò)誤或者bug,歡迎更正和補(bǔ)充描函,本篇內(nèi)容也會(huì)不斷更新
1.關(guān)于獲取行外樣式 currentStyle 和 getComputedStyle 出現(xiàn)的兼容性問題
我們都知道js通過style不可以獲取行外樣式崎苗,當(dāng)我們需要獲取行外樣式時(shí):
我們一般通過這兩個(gè)方法獲取行外樣式:
IE下: currentStyle
Chrome,FF下: getComputedStyle(oDiv,false)
function getStyle(ele,attr){
if(ele.currentStyle){
return ele.currentStyle[attr];
}else{
return getComputedStyle(ele,false)[attr];
}
}
2關(guān)于為一個(gè)元素綁定兩個(gè)相同事件:attachEvent/attachEventLister 出現(xiàn)的兼容問題
事件綁定:(不兼容需要兩個(gè)結(jié)合做兼容if..else..)
IE8以下用: attachEvent('事件名',fn);
FF,Chrome,IE9-10用: attachEventLister('事件名',fn,false); //這個(gè)事件名沒有on
多事件綁定封裝成一個(gè)兼容函數(shù):
function addEvent(ele,type,cb){
if(ele.addEventListener){
ele.addEventListener(type,cb)
}else if(ele.attachEvent){
ele.attachEvent("on"+type,cb)
}else{
ele["on"+type] = cb;
}
}
3監(jiān)聽事件的刪除 removeEventListener/detachEvent
function removeEvent(ele,type,cb){
if(ele.removeEventListener){
ele.removeEventListener(type,cb)
}else if(ele.detachEvent){
ele.detachEvent("on"+type,cb)
}else{
ele["on"+type] = null;
}
}
4關(guān)于使用 event對(duì)象,出現(xiàn)的兼容性問題
ob.onclick=function(eve) {
//事件對(duì)象的兼容寫法
var e=eve || window.event;
5取消默認(rèn)事件
w3c的方法是e.preventDefault()舀寓,IE則是使用e.returnValue = false;**·
preventDefault它是事件對(duì)象(Event)的一個(gè)方法胆数,作用是取消一個(gè)目標(biāo)元素的默認(rèn)行為。既然是說默認(rèn)行為互墓,當(dāng)然是元素必須有默認(rèn)行為才能被取消必尼,如果元素本身就沒有默認(rèn)行為,調(diào)用當(dāng)然就無效了篡撵。什么元素有默認(rèn)行為呢判莉?如鏈接<a>,提交按鈕<input type=”submit”>等育谬。當(dāng)Event 對(duì)象的 cancelable為false時(shí)券盅,表示沒有默認(rèn)行為,這時(shí)即使有默認(rèn)行為膛檀,調(diào)用preventDefault也是不會(huì)起作用的锰镀。
function stopDefault(e){
if(e.preventDefault){
e.preventDefault()
}else{
e.returnValue = false;
}
}
6取消冒泡事件
w3c的方法是e.stopPropagation()娘侍,IE則是使用e.cancelBubble = true**·
stopPropagation也是事件對(duì)象(Event)的一個(gè)方法,作用是阻止目標(biāo)元素的冒泡事件泳炉,但是會(huì)不阻止默認(rèn)行為憾筏。什么是冒泡事件?如在一個(gè)按鈕是綁定一個(gè)”click”事件花鹅,那么”click”事件會(huì)依次在它的父級(jí)元素中被觸發(fā) 氧腰。stopPropagation就是阻止目標(biāo)元素的事件冒泡到父級(jí)元素
function stopBubble(e){
if(e.stopPropagation){
e.stopPropagation();
}else{
e.cancelBubble = true;
}
}
7事件源的兼容寫法
在事件中,當(dāng)前操作的那個(gè)元素就是事件源翠胰。比如網(wǎng)頁元素中a標(biāo)簽和input都有onclick事件容贝,當(dāng)點(diǎn)擊a發(fā)生onclick事件時(shí),事件源就是a標(biāo)簽之景,當(dāng)點(diǎn)擊input發(fā)送onclic事件是斤富,事件源就是input。
如何獲取事件源锻狗?
IE下:window.event.srcElement
標(biāo)準(zhǔn)下:event.target
由此可見满力,我們是通過事件對(duì)象獲取到的事件源
ob.onclick=function(eve) {
//事件源的兼容寫法
var e=eve || window.event;
var t=e.target || e.srcElement;
8鍵盤事件的兼容寫法
IE下:event.which
標(biāo)準(zhǔn)下:event.keyCode
ob.onclick=function(eve) {
//鍵盤事件的兼容
var e=eve || window.event;
var keyC=eve.keyCode || eve.which;
9 下面列數(shù)一些常見的keyCode值
event.keyCode 返回當(dāng)前按鍵的ASCII碼
空格 32
回車 13
左 37
上 38
右 39
下 40
ctrlKey 判斷ctrl是否被按下,按下返回true
shiftKey 判斷shift是否被按下轻纪,按下返回true
altKey 判斷alt是否被按下油额,按下返回true