題目1: DOM0 事件和DOM2級在事件監(jiān)聽使用方式上有什么區(qū)別吗蚌?
- DOM0級方法指定的事件處理程序被認為是元素的方法,就是將一個函數(shù)賦值給一個事件處理程序屬性(每個元素包括window和document都有自己處理程序的屬性)昏滴。例如:onclick、onmouseover对人、onmouseout等谣殊。因此,這時候的事件處理程序是在元素的作用域中執(zhí)行的牺弄,DOM0級事件只能覆蓋姻几,不會連續(xù)觸發(fā)。
- DOM2級事件’定義了兩個方法势告,用于處理指定和刪除事件處理程序的操作:addEventListener()和removeEventListener();所有的DOM節(jié)點都包含這兩種方法蛇捌。
它們都接受3個參數(shù):要處理的事件名,事件處理程序的函數(shù)咱台,和一個布爾值络拌。 最后一個參數(shù):如果為true,表示在捕獲階段調用事件處理程序吵护,如果是false盒音,表示在冒泡階段調用事件處理程序表鳍,DOM2級事件可以連續(xù)觸發(fā)。
題目2: attachEvent與addEventListener的區(qū)別祥诽?
- attachEvent (不支持addEventListener的舊IE瀏覽器特有)
- 只有兩個參數(shù)(函數(shù)名譬圣、)
- 只能以冒泡事件觸發(fā)
- 作用域: 全局變量 this 指向window
- 指定多個同類型事件時,執(zhí)行順序無規(guī)律(如少量方法還會按順序執(zhí)行)
- addEventListener
- 三個參數(shù)(事件類型雄坪、方法厘熟、布爾值)
- 作用域: 元素自身, this 指觸發(fā)元素
- 指定多個同類型事件時维哈,按添加順序執(zhí)行
題目3: 解釋IE事件冒泡和DOM2事件傳播機制绳姨?
- IE的事件冒泡:事件開始時由最具體的元素接收,然后逐級向上傳播到較為不具體的元素
- DOM事件流:DOM2級事件規(guī)定事件流包括三個階段阔挠,事件捕獲階段飘庄,處于目標階段,事件冒泡階段购撼,首先發(fā)生的是事件捕獲跪削,為截取事件提供機會,然后是實際目標接收事件迂求,最后是冒泡階段
題目4:如何阻止事件冒泡碾盐? 如何阻止默認事件?
stopPropagation()方法可以停止事件在DOM層次的傳播揩局,即取消進一步的事件捕獲或冒泡毫玖。
要阻止事件的默認行為,可以使用preventDefault()方法凌盯,前提是cancelable值為true
題目5:有如下代碼付枫,要求當點擊每一個元素li時控制臺展示該元素的文本內容。不考慮兼容
var lis = document.querySelector('.ct'). querySelectorAll('li'); for (var i = 0;i<lis.length; i++) { lis[i].addEventListener('click',function() { console.log(this.innerText); }) }
var ct = document.querySelector('.ct'); ct.addEventListener('click',function(e) { console.log(e.target.innerText); })
題目6: 補全代碼十气,要求:
當點擊按鈕開頭添加時在<li>這里是</li>
元素前添加一個新元素励背,內容為用戶輸入的非空字符串;當點擊結尾添加時在最后一個 li 元素后添加用戶輸入的非空字符串.
當點擊每一個元素li時控制臺展示該元素的文本內容砸西。
var content = document.querySelector('.ipt-add-content'); var start = document.querySelector('#btn-add-start'); var end = document.querySelector('#btn-add-end'); var ct = document.querySelector('.ct'); end.addEventListener('click',function(){ var li = document.createElement('li'); li.innerText = content.value; if(li.innerText !=''){ ct.appendChild(li); } }); start.addEventListener('click',function(){ var li = document.createElement('li'); li.innerText = content.value; if(li.innerText !=''){ ct.appendChild(li); } ct.insertBefore(li,ct.firstChild); }); ct.addEventListener('click',function(e){ if(e.target.tagName.toUpperCase()==='LI') console.log(e.target.innerText); });
題目7: 補全代碼叶眉,要求:當鼠標放置在li元素上,會在img-preview里展示當前l(fā)i元素的data-img對應的圖片芹枷。
var ct = document.querySelector('.ct'); var imgPre= document.querySelector('.img-preview'); var image = document.createElement('img'); ct.addEventListener('mouseover',function(e) { var path = e.target.getAttribute('data-img'); image.setAttribute('src',path); imgPre.appendChild(image); });