DOM0 事件和DOM2級(jí)在事件監(jiān)聽使用方式上有什么區(qū)別拇囊?
DOM0級(jí)事件使用方式:
1.直接在標(biāo)簽內(nèi)部寫onclick等事件挪圾;
2.在js代碼中例如:xxx.oncilck = function(){}
DOM2級(jí)事件使用方式:
監(jiān)聽方法:
addEventListener:添加事件處理,可以為元素添加多個(gè)事件處理程序盲泛,觸發(fā)時(shí)會(huì)按照添加順序依次調(diào)用疗隶。
removeEventListener:移除事件處理,不能移除匿名添加的函數(shù)糕韧。
它們都有三個(gè)參數(shù):
事件類型枫振,事件處理方法,布爾值(true表示在時(shí)間捕獲階段調(diào)用事件處理萤彩,false表示在事件冒泡階段調(diào)用事件處理)粪滤;
只有2級(jí)DOM包含3個(gè)事件:事件捕獲階段、處于目標(biāo)階段和事件冒泡階段雀扶。
attachEvent與addEventListener的區(qū)別杖小?
IE并不支持addEventListener,但支持attachEvent愚墓;由于IE只支持冒泡事件予权,所以添加的程序會(huì)被添加到冒泡階段。
attachEvent與addEventListener的不同點(diǎn):
1.參數(shù)個(gè)數(shù)不同浪册,attachEvent添加的事件處理程序只能發(fā)生在冒泡階段扫腺;addEventListener則可以通過第三個(gè)參數(shù)來決定冒泡還是捕獲(為了瀏覽器兼容一般都選擇冒泡);
2.第一個(gè)參數(shù)意義不同村象,addEventListener第一個(gè)參數(shù)是事件類型(比如click斧账,load)谴返,而attachEvent第一個(gè)參數(shù)指明的是事件處理函數(shù)名稱(onclick,onload)
3.事件處理程序的作用域不相同咧织,addEventListener的作用域是元素本身嗓袱,this是指的觸發(fā)元素;attachEvent事件處理程序會(huì)在全局變量內(nèi)運(yùn)行习绢,this是window渠抹。
4.為一個(gè)事件添加多個(gè)事件處理程序時(shí),執(zhí)行順序不同闪萄。addEventListener添加會(huì)按照添加順序執(zhí)行梧却;attachEvent添加多個(gè)事件處理程序時(shí)順序無規(guī)律
解釋IE事件冒泡和DOM2事件傳播機(jī)制?
IE事件冒泡败去,從目標(biāo)元素出發(fā)放航,向外層元素冒泡,最后到達(dá)頂層(window或document)圆裕,依次執(zhí)行綁定再其上的事件广鳍。
事件捕獲階段,即由最頂層元素(一般是從window元素開始吓妆,有的瀏覽器是從document開始赊时,至于其中的差別我稍后會(huì)更新)開始,逐次進(jìn)入dom內(nèi)部行拢,最后到達(dá)目標(biāo)元素祖秒,依次執(zhí)行綁定在其上的事件。
如何阻止事件冒泡舟奠? 如何阻止默認(rèn)事件竭缝?
阻止冒泡:IE下設(shè)置CancleBubble為true,其他的利用stopPropagation
function stopPropagation(e) {
if (e.stopPropagation){
e.stopPropagation();
}else{
e.cancelBubble = true;//IE
}
}
阻止默認(rèn):
function preventDefault(e) {
if (e.preventDefault){
e.preventDefault();
}else{
e.returnValue = false;//IE
}
}
有如下代碼沼瘫,要求當(dāng)點(diǎn)擊每一個(gè)元素li時(shí)控制臺(tái)展示該元素的文本內(nèi)容歌馍。不考慮兼容
<ul class="ct">
<li>這里是</li>
<li>饑人谷</li>
<li>前端6班</li>
</ul>
<script>
var ul = document.querySelector('.ct');
ul.addEventListener('click', function (e) {
/* body... */
var target = e.target;
console.log(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)容。
任務(wù)6