學(xué)習(xí) 事件 的總結(jié)

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

  • DOM0:把一個(gè)方法賦值給一個(gè)元素的事件處理程序?qū)傩运晏郏@樣處理些己,事件處理程序被認(rèn)為是元素的方法,事件處理程序在元素的作用域下運(yùn)行,this就是當(dāng)前元素枝恋。這樣的缺陷是:同一個(gè)事件只能有一個(gè)事件監(jiān)聽函數(shù),再次添加會(huì)產(chǎn)生覆蓋三热。
var btnClick = document.getElementById('btnClick');
btnClick.onclick = function handler() {
    alert(this.id);
}; //bthClick
  • DOM2:這種方式可以給一個(gè)同一個(gè)元素添加多個(gè)處理事件鼓择,同時(shí)它的this也指向元素本身。
var btnClick = document.getElementById('btnClick');
btnClick.addEventListener('click', function() {
    alert(this.id);
}, false); //btnClick

2- attachEvent與addEventListener的區(qū)別

  • 適用瀏覽器不同:attachEvent是IE的事件處理方法就漾,addEventListener是標(biāo)準(zhǔn)瀏覽器的處理方式呐能。
  • 參數(shù)個(gè)數(shù)不相同:addEventListener有三個(gè)參數(shù),attachEvent只有兩個(gè)抑堡,attachEvent添加的事件處理程序只能發(fā)生在冒泡階段摆出,addEventListener第三個(gè)參數(shù)可以決定添加的事件處理程序是在捕獲階段還是冒泡階段處理。
  • 第一個(gè)參數(shù)意義不同:addEventListener第一個(gè)參數(shù)是事件類型(比如click首妖,load)偎漫,而attachEvent第一個(gè)參數(shù)指明的是事件處理函數(shù)名稱(onclick,onload)有缆。
  • 事件處理程序的作用域不相同:addEventListener的作用域是元素本身象踊,this是指的觸發(fā)元素,而attachEvent事件處理程序會(huì)在全局變量內(nèi)運(yùn)行棚壁,this是window杯矩。
  • 為一個(gè)事件添加多個(gè)事件處理程序時(shí),執(zhí)行順序不同:addEventListener添加會(huì)按照添加順序執(zhí)行袖外,而attachEvent添加多個(gè)事件處理程序時(shí)順序無規(guī)律史隆。

3- IE事件冒泡和DOM2事件傳播機(jī)制

  • IE的事件冒泡:事件開始時(shí)由最具體的元素接收,然后逐級(jí)向上傳播到較為不具體的元素曼验。
  • DOM2:DOM2級(jí)事件規(guī)定事件流包括三個(gè)階段泌射,事件捕獲階段粘姜,處于目標(biāo)階段,事件冒泡階段熔酷,首先發(fā)生的是事件捕獲孤紧,為截取事件提供機(jī)會(huì),然后是實(shí)際目標(biāo)接收事件纯陨,最后是冒泡階段坛芽。

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

  • DOM瀏覽器:
    • 阻止事件冒泡:stopPropagation()
    • 阻止默認(rèn)事件:preventDefault()
  • IE瀏覽器:
    • 阻止事件冒泡:cancelBubble 默認(rèn)為false咙轩,設(shè)置為true后可以取消事件冒泡
    • 阻止默認(rèn)事件:returnValue 默認(rèn)為true,設(shè)為false可以取消事件默認(rèn)行為

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

<ul class="ct">
    <li>這里是</li>
    <li>饑人谷</li>
    <li>前端6班</li>
</ul>
<script>
//todo ...
</script>
<ul class="ct">
    <li>這里是</li>
    <li>饑人谷</li>
    <li>前端9班</li>
</ul>
<script>
var lis = document.querySelectorAll('.ct li');
for(var i = 0; i < lis.length; i++){
    lis[i].addEventListener('click', function(){
        console.log(this.innerText);
    })
}
</script>

6- 補(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 class="ipt-add-content" placeholder="添加內(nèi)容"/>
<button id="btn-add-start">開頭添加</button>
<button id="btn-add-end">結(jié)尾添加</button>
<script>
//你的代碼
</script>
<div>
    <ul class="ct">
        <li>這里是</li>
        <li>饑人谷</li>
        <li>任務(wù)班</li>
    </ul>
    <input class="ipt-add-content" placeholder="添加內(nèi)容"/>
    <button id="btn-add-start">開頭添加</button>
    <button id="btn-add-end">結(jié)尾添加</button>
</div>
<script>
    var ul = document.querySelector(".ct");
    var btn_add_start = document.querySelector("#btn-add-start");
    var btn_add_end = document.querySelector("#btn-add-end");
    var content = document.querySelector(".ipt-add-content");
    btn_add_start.onclick = function (event) {
        if(content.value.length < 1 ){
            alert('請(qǐng)輸入項(xiàng)目名稱');
        }else{
            var newNode = document.createElement("li");
            newNode.innerHTML = content.value;
            ul.insertBefore(newNode, ul.firstElementChild);
            content.value = "";
        }
    }
    btn_add_end.onclick = function (event) {
        if(content.value.length < 1 ){
            alert('請(qǐng)輸入項(xiàng)目名稱');
        }else{
            var newNode = document.createElement("li");
            newNode.innerHTML = content.value;
            ul.appendChild(newNode);
            content.value = "";
        }
    }
    function outputInnerText(event){
        var target = event.target;
        console.log(target.innerHTML);
    }
    ul.addEventListener("click", outputInnerText);
</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>
//你的代碼
</script>
<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 preview = document.querySelector('.img-preview');
var ct = document.querySelector('.ct');
ct.addEventListener('mouseover', function(e){
  if(e.target.tagName.toLowerCase() === 'li'){
  var img = document.createElement('img');
  img.src = e.target.getAttribute('data-img');
  preview.appendChild(img); 
  }
})
ct.addEventListener('mouseout', function(e){
  if(e.target.tagName.toLowerCase() === 'li'){
  preview.innerHTML = '';
  }
});
</script>
- 其他參考資料:event事件
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末累颂,一起剝皮案震驚了整個(gè)濱河市滞详,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌紊馏,老刑警劉巖料饥,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異朱监,居然都是意外死亡岸啡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門赫编,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巡蘸,“玉大人,你說我怎么就攤上這事擂送≡没模” “怎么了?”我有些...
    開封第一講書人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵团甲,是天一觀的道長。 經(jīng)常有香客問我黍聂,道長躺苦,這世上最難降的妖魔是什么身腻? 我笑而不...
    開封第一講書人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮匹厘,結(jié)果婚禮上嘀趟,老公的妹妹穿的比我還像新娘。我一直安慰自己愈诚,他們只是感情好她按,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炕柔,像睡著了一般酌泰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上匕累,一...
    開封第一講書人閱讀 50,021評(píng)論 1 291
  • 那天陵刹,我揣著相機(jī)與錄音,去河邊找鬼欢嘿。 笑死衰琐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的炼蹦。 我是一名探鬼主播羡宙,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼掐隐!你這毒婦竟也來了狗热?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤瑟枫,失蹤者是張志新(化名)和其女友劉穎斗搞,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慷妙,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡僻焚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膝擂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虑啤。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖架馋,靈堂內(nèi)的尸體忽然破棺而出狞山,到底是詐尸還是另有隱情,我是刑警寧澤叉寂,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布萍启,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏勘纯。R本人自食惡果不足惜局服,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驳遵。 院中可真熱鬧淫奔,春花似錦、人聲如沸堤结。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竞穷。三九已至唐责,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間来庭,已是汗流浹背妒蔚。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留月弛,地道東北人肴盏。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像帽衙,于是被迫代替她去往敵國和親菜皂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

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

  • 題目1: DOM0 事件和DOM2級(jí)在事件監(jiān)聽使用方式上有什么區(qū)別厉萝? DOM0事件監(jiān)聽就是把一個(gè)處理方式賦值給一個(gè)...
    饑人谷_一葉之秋閱讀 195評(píng)論 0 0
  • DOM0 事件和DOM2級(jí)在事件監(jiān)聽使用方式上有什么區(qū)別恍飘? DOM0可以通過HTML元素屬性或者Javascrip...
    RookieD閱讀 163評(píng)論 0 0
  • 題目1: DOM0 事件和DOM2級(jí)在事件監(jiān)聽使用方式上有什么區(qū)別? DOM0級(jí)事件監(jiān)聽就是把一個(gè)方法賦值給一個(gè)元...
    mhy_web閱讀 201評(píng)論 0 1
  • 1: DOM0 事件和DOM2級(jí)在事件監(jiān)聽使用方式上有什么區(qū)別谴垫? DOM0級(jí)事件處理程序:通過JavaScript...
    FLYSASA閱讀 264評(píng)論 0 0
  • 題目1: DOM0 事件和DOM2級(jí)在事件監(jiān)聽使用方式上有什么區(qū)別章母? DOM0級(jí)事件:就是把一個(gè)方法賦值給一個(gè)元素...
    Feiyu_有貓病閱讀 288評(píng)論 0 0