DOM事件

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

  • DOM0事件:
    通過javascript制定事件處理程序,就是把一個(gè)方法賦值給一個(gè)元素的事件處理程序?qū)傩酝碳印C總€(gè)元素都有自己的事件處理程序?qū)傩燥醯海@些屬性名稱通常為小寫,如onclick等孵滞,將這些屬性的值設(shè)置為一個(gè)函數(shù)诬滩,就可以指定事件處理程序。
    // 添加事件處理程序
    var btnClick = document.getElementById('btnClick');
    btnClick.onclick = function showMessage() {
        alert(this.id);
    };
    // 刪除事件處理程序
    btn.onclick=null;
  • DOM2級(jí)事件:
    DOM2級(jí)事件定義了兩個(gè)方法用于處理指定和刪除事件處理程序的操作:

    1. addEventListener
    2. removeEventListener

    所有的DOM節(jié)點(diǎn)都包含這兩個(gè)方法踩官,并且它們都接受三個(gè)參數(shù):

    1. 事件類型
    2. 事件處理方法
    3. 布爾參數(shù)却桶,如果是true表示在捕獲階段調(diào)用事件處理程序,如果是false,則是在事件冒泡階段處理
    var btnClick = document.getElementById('btnClick');
    var handler=function() {
        alert(this.id);
    }
    // 指定事件處理程序
    btnClick.addEventListener('click', handler, false);
    // 刪除事件處理程序
    btnClick.removeEventListener('click', handler, false);

attachEvent與addEventListener的區(qū)別

  • 瀏覽器支持情況不同: IE9 以下的瀏覽器不支持 addEventListener 方法颖系,IE 中有與其類似的事件監(jiān)聽方法 attachEvent() 和 detachEvent()
  • 參數(shù)個(gè)數(shù)不相同 :addEventListener 有三個(gè)參數(shù) (type, handle, true/false)嗅剖。attachEventListener 只有兩個(gè)參數(shù)(type, handle),因?yàn)?attachEvent 監(jiān)聽的事件只能發(fā)生在冒泡階段嘁扼,所以為了兼容性信粮,一般把a(bǔ)ddEventListener 的第三個(gè)參數(shù)設(shè)為 false。
  • 第一個(gè)參數(shù)不同:addEvnentListener 第一個(gè)參數(shù)是一個(gè)方法趁啸,如 click, scroll强缘。attachEvent 第一個(gè)參數(shù)是事件名稱,如 onclick不傅,onscroll旅掂。
  • 事件處理程序的作用域不同: DOM2級(jí)事件處理程序所處作用域在所屬的元素內(nèi)進(jìn)行,此時(shí) this 指向這個(gè)元素访娶。使用 attachEvent() 方法時(shí)商虐,事件處理程序在全局作用域內(nèi)進(jìn)行,此時(shí) this 指向 window崖疤。
  • 為一個(gè)事件添加多個(gè)事件處理程序時(shí)秘车,執(zhí)行順序不同: addEventListener 添加會(huì)按照添加順序執(zhí)行,而 attachEvent 添加多個(gè)事件處理程序時(shí)順序無規(guī)律(在 IE9一下劫哼,添加方法較少時(shí)叮趴,各方法按添加順序的反順序進(jìn)行,添加方法多時(shí)則亂序進(jìn)行)

解釋IE事件冒泡和DOM2事件傳播機(jī)制

IE事件冒泡:事件開始時(shí)由最具體的元素接收权烧,然后逐級(jí)向上傳播到較為不具體的元素眯亦。



DOM2事件傳播:DOM2級(jí)事件規(guī)定事件流包括三個(gè)階段,事件捕獲階段般码,處于目標(biāo)階段搔驼,事件冒泡階段,首先發(fā)生的是事件捕獲侈询,為截取事件提供機(jī)會(huì),然后是實(shí)際目標(biāo)接收事件糯耍,最后是冒泡階段扔字。


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

// 阻止事件冒泡
function stopPropgation(e){
  if (e && e.stopPropagation) {
    e.stopPropagation(); // W3C標(biāo)準(zhǔn)
  }else {
    window.event.cancelBubble = true; // IE瀏覽器
  }
}

// 阻止默認(rèn)事件
function preventDefault(e){
  if (e && e.stopPropagation) {
    e.preventDefault(); // W3C標(biāo)準(zhǔn)
  }else {
    window.event.returnValue = false; // IE瀏覽器
  }
}

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

<ul class="ct">
    <li>這里是</li>
    <li>饑人谷</li>
    <li>任務(wù)班</li>
</ul>
<script>
  let ct = document.querySelector('.ct')
  ct.addEventListener('click',function(e){
    console.log(e.target.innerText)  
  })
</script>

補(bǔ)全代碼,要求:

  • 當(dāng)點(diǎn)擊按鈕開頭添加時(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>這里是</li>
    <li>饑人谷</li>
    <li>任務(wù)班</li>
</ul>
<input id="ipt-add-content" placeholder="添加內(nèi)容"/>
<button id="btn-add-start">開頭添加</button>
<button id="btn-add-end">結(jié)尾添加</button>
<script>
  var ct = document.querySelector('.ct');
  var addStartBtn = document.querySelector('#btn-add-start');
  var addEndBtn = document.querySelector('#btn-add-end');
  var ipt = document.querySelector('#ipt-add-content');
  
  ct.addEventListener('click', function(e){
    console.log(e.target.innerText);
  });
  
  addEndBtn.addEventListener('click', function(){
     var li = document.createElement('li');
     if(ipt.value !== '') {
       li.innerText = ipt.value;
       ct.appendChild(li);
     } else {
       alert('內(nèi)容不能為空');
     }
  });
  
  addStartBtn.addEventListener('click', function(){
     var li = document.createElement('li');
     if(ipt.value !== '') {
       li.innerText = ipt.value;
       ct.insertBefore(li,ct.firstChild);
     }else {
       alert('內(nèi)容不能為空');
     }
  });
</script> 

補(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');
  var preview = document.querySelector('.img-preview');

  ct.addEventListener('mouseover', function (e) {
    var target = e.target;
    if (target.tagName.toLowerCase() === 'li') {
      var img = document.createElement('img');
      img.src = target.getAttribute('data-img');
      preview.innerHTML = '';
      preview.appendChild(img);
    }
  });
  ct.addEventListener('mouseout', function (e) {
    var target = e.target;
    if (target.tagName.toLowerCase() === 'li') {
      preview.innerHTML = '';
    }
  });
</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末迂猴,一起剝皮案震驚了整個(gè)濱河市慕淡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沸毁,老刑警劉巖峰髓,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異息尺,居然都是意外死亡携兵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門搂誉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來徐紧,“玉大人,你說我怎么就攤上這事勒葱±送簦” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵凛虽,是天一觀的道長死遭。 經(jīng)常有香客問我,道長凯旋,這世上最難降的妖魔是什么呀潭? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮至非,結(jié)果婚禮上钠署,老公的妹妹穿的比我還像新娘。我一直安慰自己荒椭,他們只是感情好谐鼎,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趣惠,像睡著了一般狸棍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上味悄,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天草戈,我揣著相機(jī)與錄音,去河邊找鬼侍瑟。 笑死唐片,一個(gè)胖子當(dāng)著我的面吹牛丙猬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播费韭,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼茧球,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了揽思?” 一聲冷哼從身側(cè)響起袜腥,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钉汗,沒想到半個(gè)月后羹令,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡损痰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年福侈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卢未。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肪凛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辽社,到底是詐尸還是另有隱情伟墙,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布滴铅,位于F島的核電站戳葵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏汉匙。R本人自食惡果不足惜拱烁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望噩翠。 院中可真熱鬧戏自,春花似錦、人聲如沸伤锚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屯援。三九已至剂娄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間玄呛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工和二, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留徘铝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像惕它,于是被迫代替她去往敵國和親怕午。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • 一、問答 1. dom對(duì)象的innerText和innerHTML有什么區(qū)別甲锡? innerHTML: 也就是從對(duì)象...
    饑人谷_羅偉恩閱讀 586評(píng)論 0 2
  • 題目1: DOM0 事件和DOM2級(jí)在事件監(jiān)聽使用方式上有什么區(qū)別兆蕉? Dom0級(jí)Dom0級(jí)事件處理程序是將一個(gè)函數(shù)...
    QQQQQCY閱讀 316評(píng)論 0 0
  • 問答 一虎韵、dom對(duì)象的innerText和innerHTML有什么區(qū)別? innerTextinnerText是一...
    婷樓沐熙閱讀 398評(píng)論 0 0
  • 1.dom對(duì)象的innerText和innerHTML有什么區(qū)別? innerText是一個(gè)可寫屬性企量。將寫入的內(nèi)容...
    candy252324閱讀 529評(píng)論 0 0
  • 問答 1届巩、dom對(duì)象的innerText和innerHTML有什么區(qū)別硅瞧? innerText屬性①innerTex...
    鴻鵠飛天閱讀 621評(píng)論 0 1