事件

1. DOM0 事件和DOM2級(jí)在事件監(jiān)聽(tīng)使用方式上有什么區(qū)別?

DOM2級(jí)事件特點(diǎn):

  1. 存在兩個(gè)方法弃秆,用于處理制定和刪除事件處理程序的操作(addEventListener和removeEventListener)璧针,接受三個(gè)參數(shù):事件名稱翠桦、事件處理程序的函數(shù)和布爾值钧敞,布爾值為false表示在事件冒泡階段調(diào)用事件處理程序。
  2. DOM2級(jí)事件處理程序也會(huì)依附在元素的作用域中運(yùn)行谅阿。
  3. 優(yōu)點(diǎn):可同時(shí)綁定幾個(gè)事件半哟,且不會(huì) 被覆蓋;
  4. 缺點(diǎn):不兼容签餐。IE不支持DOM2級(jí)事件寓涨,但是有兩個(gè)類似的方法
    attachEvent()/detachEvent()。 attachEvent()/detachEvent()只接受兩個(gè)參數(shù)氯檐,沒(méi)有最后一個(gè)布爾值戒良,該事件只能發(fā)生在冒泡階段。

DOM0級(jí)事件特點(diǎn):

  1. 在DOM0級(jí)事件中冠摄,事件名均是以on開(kāi)頭的(click—>onclick)糯崎。
  2. DOM0級(jí)事件處理程序是在元素的作用域中運(yùn)行的,也就是說(shuō)河泳,在事件處理程序中沃呢,this引用就是這個(gè)元素對(duì)象。
  3. 以這種方式添加的事件處理程序會(huì)在事件流的冒泡階段被處理拆挥。
  4. 取消事件冒泡:event.stopPropagation()/event.cancleBubble = true(此方法為IE中)薄霜。
  5. 刪除事件處理程序,將屬性值設(shè)為null即可(btn.onclick=null)纸兔。
  6. DOM0級(jí)事件不支持事件捕獲。
    優(yōu)點(diǎn):處理事件程序的傳統(tǒng)方式汉矿,第四代web瀏覽器至今,所有瀏覽器都支持流强。
    缺點(diǎn):一個(gè)事件處理程序只能對(duì)應(yīng)一個(gè)處理函數(shù)痹届,同時(shí)綁定多個(gè)事件時(shí)呻待,事件會(huì)被覆蓋
    這是因?yàn)閎tn.onclick實(shí)際上就像一個(gè)指針,在執(zhí)行第一個(gè)事件處理程序時(shí)它指向了內(nèi)存中的一個(gè)引用队腐,執(zhí)行第二個(gè)事件處理程序時(shí)它又會(huì)指向另一個(gè)內(nèi)存的引用,最終會(huì)指向最后一個(gè)事件處理函數(shù)的內(nèi)存引用迫淹。

2. attachEvent與addEventListener的區(qū)別秘通?

主要的區(qū)別:

  1. 參數(shù)個(gè)數(shù)不相同,addEventListener有三個(gè)參數(shù)敛熬,attachEvent還有兩個(gè)肺稀,attatchEvent添加的事件處理程序只能發(fā)生在冒泡階段,addEventListener第三個(gè)參數(shù)可以決定添加的事件處理程序是在冒泡階段還是捕獲階段處理(一般為了兼容性都設(shè)置為冒泡階段)
  2. 第一個(gè)參數(shù)意義不同话原,addEventListener第一個(gè)參數(shù)是事件類型(比如click,load)诲锹,而attachEvent第一個(gè)參數(shù)指明的是事件處理函數(shù)名稱(onclick,onload)
  3. 事件處理程序的作用域不相同,addEventListener的作用域是元素本身归园,this是指的觸發(fā)元素,而attachEvent事件處理程序會(huì)在全局變量?jī)?nèi)運(yùn)行捻浦,this是window,所以會(huì)返回undefined,而不是元素id
  4. 為一個(gè)事件添加多個(gè)事件處理程序時(shí)默勾,執(zhí)行順序不同聚谁,addEventListener添加會(huì)按照添加順序執(zhí)行,而attachEvent添加多個(gè)事件處理程序時(shí)順序無(wú)規(guī)律(添加的方法少的時(shí)候大多是按添加順序的反順序執(zhí)行的形导,但是添加多了就無(wú)規(guī)律了),所以添加多個(gè)是時(shí)候不依賴執(zhí)行順序的還好炫隶,若是依賴于函數(shù)執(zhí)行順序阎曹,最好自己處理,不要依賴于瀏覽器

3. 解釋IE事件冒泡和DOM2事件傳播機(jī)制处嫌?

IE事件的冒泡:最內(nèi)部的元素節(jié)點(diǎn)逐級(jí)向上傳播到window(document)。
DOM2級(jí)事件的傳播機(jī)制:三種傳播方式冒泡階段檐薯,捕獲階段和DOM事件流。冒泡階段傳播方式是由下層層向上坛缕。捕獲階段傳播方式是由上層層向下墓猎。DOM事件流是先事件捕獲由上層層向下,然后是實(shí)際目標(biāo)接受事件最后由下層層向上冒泡毙沾。

4. 如何阻止事件冒泡宠页? 如何阻止默認(rèn)事件?

阻止事件冒泡使用event.stopPropagation()
方法阻止事件在DOM中繼續(xù)傳播勇皇,防止再觸發(fā)定義在別的節(jié)點(diǎn)上的監(jiān)聽(tīng)函數(shù),但是不包括在當(dāng)前節(jié)點(diǎn)上新定義的事件監(jiān)聽(tīng)函數(shù)
阻止默認(rèn)事件使用event.preventDefault()
方法不會(huì)阻止事件的進(jìn)一步傳播,只要在事件的傳播過(guò)程中(捕獲階段门烂、目標(biāo)階段兄淫、冒泡階段皆可),使用了preventDefault方法捕虽,該事件的默認(rèn)方法就不會(huì)執(zhí)行

5. 有如下代碼,要求當(dāng)點(diǎn)擊每一個(gè)元素li時(shí)控制臺(tái)展示該元素的文本內(nèi)容房揭。不考慮兼容

<ul class="ct">
    <li>這里是</li>
    <li>饑人谷</li>
    <li>前端6班</li>
</ul>
<script>
function $$(ct){
    return document.querySelector(ct)
}

$$('.ct').addEventListener('click',function(e){
    console.log(e.target.innerText)
    })
</script>

6. 補(bǔ)全代碼晌端,要求:當(dāng)點(diǎn)擊按鈕開(kāi)頭添加時(shí)在<li>這里是</li>元素前添加一個(gè)新元素,內(nèi)容為用戶輸入的非空字符串蓬痒;當(dāng)點(diǎn)擊結(jié)尾添加時(shí)在最后一個(gè) li 元素后添加用戶輸入的非空字符串.

當(dāng)點(diǎn)擊每一個(gè)元素li時(shí)控制臺(tái)展示該元素的文本內(nèi)容漆羔。

<ul class="ct">
    <li>文本1</li>
    <li>文本2</li>
    <li>文本3</li>
</ul>
<input class="ipt-add-content" placeholder="添加內(nèi)容"/>
<button id="btn-add-start">開(kāi)頭添加</button>
<button id="btn-add-end">結(jié)尾添加</button>
<script>
    function $$(ct) {
        return document.querySelector(ct)
    }

    $$('.ct').addEventListener('click',function(e){
        console.log(e.target.innerText)
    });

    $$('#btn-add-start').addEventListener('click',function(){
        var newLi = document.createElement('li');
        newLi.innerText = document.querySelector('.ipt-add-content').value;
        if( newLi.innerText.match(/\s/))
            ct.insertBefore(newLi, ct.firstChild);
        });

    $$('#btn-add-end').addEventListener('click',function(){
        var newLi = document.createElement('li');
        newLi.innerText = document.querySelector('.ipt-add-content').value;
        if( newLi.innerText.match(/\s/))
            ct.appendChild(newLi);
    })
</script>

7.補(bǔ)全代碼,要求:當(dāng)鼠標(biāo)放置在li元素上亲轨,會(huì)在img-preview里展示當(dāng)前l(fā)i元素的data-img對(duì)應(yīng)的圖片嫡霞。

<ul class="ct">
    <li data-img="1.png">鼠標(biāo)放置查看圖片1</li>
    <li data-img="2.png">鼠標(biāo)放置查看圖片2</li>
    <li data-img="3.png">鼠標(biāo)放置查看圖片3</li>
</ul>
<div class="img-preview"></div>
<script>
    var ct = document.querySelector('.ct'),
    preview = document.querySelector('.img-preview');

    function hanlder(node){
        if(node.target.tagName.toLowerCase() === 'li'){
            var dataImg = node.target.getAttribute('data-img');
            console.log(dataImg);
            preview.innerHTML = '<img src="' + dataImg + '">';
        }
    }
    ct.addEventListener('mouse',hanlder,true);
</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末希柿,一起剝皮案震驚了整個(gè)濱河市养筒,隨后出現(xiàn)的幾起案子端姚,更是在濱河造成了極大的恐慌,老刑警劉巖巫湘,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昏鹃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡阅嘶,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門讯柔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)护昧,“玉大人,你說(shuō)我怎么就攤上這事捣炬≌篱唬” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵稿械,是天一觀的道長(zhǎng)冲粤。 經(jīng)常有香客問(wèn)我美莫,道長(zhǎng)梯捕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任襟铭,我火速辦了婚禮,結(jié)果婚禮上赐劣,老公的妹妹穿的比我還像新娘。我一直安慰自己魁兼,他們只是感情好漠嵌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著化撕,像睡著了一般约炎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上章钾,一...
    開(kāi)封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音惨撇,去河邊找鬼府寒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛株搔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纵隔,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼炮姨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了舒岸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤俄认,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后眯杏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡糊探,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了褥紫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡部念,死狀恐怖氨菇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情查蓉,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布妹田,位于F島的核電站鹃共,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏霜浴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一房铭、第九天 我趴在偏房一處隱蔽的房頂上張望温眉。 院中可真熱鬧缸匪,春花似錦类溢、人聲如沸露懒。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)坎弯。三九已至,卻和暖如春抠忘,著一層夾襖步出監(jiān)牢的瞬間外永,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工囚灼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人灶体。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓掐暮,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親劫乱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • 聲明:本文來(lái)源于http://www.webzsky.com/?p=731我只是在這里作為自己的學(xué)習(xí)筆記整理一下(...
    angryyan閱讀 7,006評(píng)論 1 6
  • 一、問(wèn)答 1. dom對(duì)象的innerText和innerHTML有什么區(qū)別疲吸? innerHTML: 也就是從對(duì)象...
    饑人谷_羅偉恩閱讀 596評(píng)論 0 2
  • 如何批量操作 css 如何獲取 DOM 計(jì)算后的樣式 使用getComputedStyle獲取元素計(jì)算后的樣式 實(shí)...
    _Dot912閱讀 557評(píng)論 1 3
  • 事件 JavaScript和HTML的交互是通過(guò)事件實(shí)現(xiàn)的前鹅。JavaScript采用異步事件驅(qū)動(dòng)編程模型,當(dāng)文檔舰绘、...
    徐國(guó)軍_plus閱讀 580評(píng)論 0 2
  • DOM0級(jí)和DOM2級(jí)在事件監(jiān)聽(tīng)使用方式上有什么區(qū)別? DOM0級(jí)事件監(jiān)聽(tīng):用JavaScript指定事件處理程序...
    LeeoZz閱讀 376評(píng)論 0 1