事件

題目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); });

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 問答 一、dom對象的innerText和innerHTML有什么區(qū)別? innerTextinnerText是一...
    婷樓沐熙閱讀 469評論 0 0
  • DOM0級和DOM2級在事件監(jiān)聽使用方式上有什么區(qū)別? DOM0級事件監(jiān)聽:用JavaScript指定事件處理程序...
    LeeoZz閱讀 435評論 0 1
  • 1.dom對象的innerText和innerHTML有什么區(qū)別? innerText是一個可寫屬性。將寫入的內容...
    candy252324閱讀 610評論 0 0
  • 1.dom對象的innerText和innerHTML有什么區(qū)別? innerText是一個可寫屬性,返回元素內包...
    GarenWang閱讀 494評論 0 0
  • 陽朔 小龍女 意想不到 1.最近我總是比鬧鐘鈴響之前先醒來 2.依恒集了10個能量小票了想換水彩筆,卻發(fā)現(xiàn)能量小票...
    龍之蹊閱讀 454評論 0 0

友情鏈接更多精彩內容