DOM0 事件和DOM2級在事件監(jiān)聽使用方式上有什么區(qū)別?
Dom0中的事件處理函數(shù)
DOM0中通過on開頭加上事件,click事件的事件處理程序就是onclick,load事件的事件處理程序就是onload
后添加的事件處理程序會覆蓋掉之前添加的處理程序,只能有一個(gè)是有效的;DOM0級以屬性賦值的方式綁定事件程序;
- html中綁定事件
<input id='myBtn' type="button" value="這是個(gè)按鈕 "onclick="showMessage()" />
- 對應(yīng)的程序
function showMessage(){
console.log(this.id);
}
//還有一種方法,獲取對應(yīng)的DOM,綁定屬性值
var btn=document.getElementById("myBtn");
btn.onclick=function(){
console.log(this.id);
}
- 取消事件
DOM0級事件處理程序可以認(rèn)為是元素的方法。刪除DOM0級事件處理程序,將相應(yīng)屬性值設(shè)置為null即可。
btn.onclick=null;
缺點(diǎn):1.HTML與JavaScript代碼緊密耦合,對代碼修改和維護(hù)都造成了不便。2.如果一個(gè)事件綁定多個(gè)程序,后面的程序會覆蓋前面的程序
DOM2的事件監(jiān)聽
DOM2中通過addEventListener()添加事件監(jiān)聽,通過removeEventListener()來移除事件監(jiān)聽
var btn=document.quertSelector(".mybtn")
btn.addEventListener('click',showMessage,false)
btn.removeEventListener('click',showMessage,false)
實(shí)現(xiàn)了js和html分離,也可以綁定多個(gè)元素
btn.addEventListener('click',showMessage,false)
btn.addEventListener('click',showMessage2,false)
btn.addEventListener('click',showMessage3,false)
attachEvent與addEventListener的區(qū)別?
低版本的IE不支持addEventListener()事件監(jiān)聽,它通過attachEvent()來實(shí)現(xiàn)事件的監(jiān)聽
參數(shù)的區(qū)別
addEventListener()接受三個(gè)參數(shù)(事件類型,事件方法,布爾值{如果是true則是在捕獲階段調(diào)用事件方法,如果是false則是在事件冒泡階段處理}),attachEvent()接受二個(gè)參數(shù)(事件類型,事件方法)第一個(gè)參數(shù)的值不同
addEventListener()的第一個(gè)值參數(shù)是事件類型(click,load),attachEvent()則是事件處理函數(shù)名稱(onclick,onload)事件處理程序的作用域的不同
addEventListener的作用域是元素本身,this是指的觸發(fā)元素,而attachEvent事件處理程序會在全局變量內(nèi)運(yùn)行,所以this是window為一個(gè)事件添加多個(gè)事件處理程序時(shí),執(zhí)行順序不同
addEventListener會從上到下的依次執(zhí)行,而attachEvent當(dāng)事件監(jiān)聽多的時(shí)候,是沒有規(guī)律的執(zhí)行