JS中出現(xiàn)的的兼容問題的總結(jié)(持續(xù)更新中)

普及:瀏覽器的兼容性問題,往往是個(gè)別瀏覽器(沒錯(cuò)蓝厌,就是那個(gè)與眾不同的瀏覽器)對(duì)于一些標(biāo)準(zhǔn)的定義不一致導(dǎo)致的吐限。俗話說:沒有IE就沒有傷害。


ie.png

內(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市刻帚,隨后出現(xiàn)的幾起案子潦嘶,更是在濱河造成了極大的恐慌,老刑警劉巖崇众,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掂僵,死亡現(xiàn)場離奇詭異,居然都是意外死亡顷歌,警方通過查閱死者的電腦和手機(jī)锰蓬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眯漩,“玉大人芹扭,你說我怎么就攤上這事∩舛叮” “怎么了舱卡?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長队萤。 經(jīng)常有香客問我灼狰,道長,這世上最難降的妖魔是什么浮禾? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任交胚,我火速辦了婚禮份汗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝴簇。我一直安慰自己杯活,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布熬词。 她就那樣靜靜地躺著旁钧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪互拾。 梳的紋絲不亂的頭發(fā)上歪今,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音颜矿,去河邊找鬼寄猩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛骑疆,可吹牛的內(nèi)容都是我干的田篇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼箍铭,長吁一口氣:“原來是場噩夢啊……” “哼泊柬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诈火,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤兽赁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后冷守,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闸氮,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年教沾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片译断。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柱衔,到底是詐尸還是另有隱情夺刑,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布翎蹈,位于F島的核電站淮菠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏荤堪。R本人自食惡果不足惜合陵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一枢赔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拥知,春花似錦踏拜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至襟齿,卻和暖如春姻锁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背猜欺。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工位隶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人替梨。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓钓试,卻偏偏與公主長得像,于是被迫代替她去往敵國和親副瀑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弓熏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的挽鞠。 ??事件,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,474評(píng)論 1 11
  • JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的狈孔。事件信认,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特定的交互瞬...
    LemonnYan閱讀 675評(píng)論 0 4
  • 以下文章為轉(zhuǎn)載,對(duì)理解JavaScript中的事件處理機(jī)制很有幫助均抽,淺顯易懂嫁赏,特分享于此。 什么是事件油挥? 事件(E...
    jxyjxy閱讀 3,028評(píng)論 1 10
  • 聲明:本文來源于http://www.webzsky.com/?p=731我只是在這里作為自己的學(xué)習(xí)筆記整理一下(...
    angryyan閱讀 6,971評(píng)論 1 6
  • 什么是事件: 我們可以簡單的把事件理解為瀏覽器的感知系統(tǒng)潦蝇。比如說:他可以感覺到用戶是否點(diǎn)擊(click)了頁面、鼠...
    張松1366閱讀 6,778評(píng)論 1 6