事件

1.DOM事件和DOM2級在事件監聽使用方式上有啥區別?

事件監聽器也叫事件處理程序,是為了響應某個事件的方法

  • DOM事件監聽方式
    1.HTML內聯方式
 <input type="button" value="Click Here" onclick="alert('Clicked!')">

2.JavaScript指定事件處理程序
把一個方法賦值給一個元素的事件處理程序屬性

<input id="btnClick" type="button" value="Click Here2">
<body>
<script>
var btnClick=document.getElementById('btnClick');
btnClick.onclick=function shoeMessage(){
    alert(this.id);
}
</script>
  • DOM2事件監聽方式
    DOM2事件處理程序,定義了兩個方法用于處理指定和刪除事件處理程序的操作;所有的DOM方法都包含這兩個方法,并且接受三個參數
    1.addEventListener
    2.removeEventListener
    參數:
    1.事件類型(click,mouseover....)
    2.事件處理方法
    3.true/false(默認值為false,冒泡階段才觸發)

      var btnClick=document.getElementById('btnClick');
      btnClick.addEventListener('click',function(){
      alert(this.id);
      })
    

2.attachEvent和addEventListener的區別是什么?

addEventListener: 是DOM2級獲取事件處理程序的方法,它包含三個參數(事件類型、事件處理方法、布爾參數true/false-默認值為false即是冒泡階段觸發)
attachEvent:IE瀏覽器事件處理程序方法,同時接收兩個參數:(事件處理程序名稱、事件處理程序方法)

3.解釋IE事件冒泡和DOM2事件的傳播機制?

IE事件冒泡:從點擊最具體的逐步往外冒泡,IE有且僅有事件冒泡機制
DOM2級事件:包含事件捕獲階段、處于目標階段、事件冒泡階段,大部分瀏覽器都支持DOM2事件流,IE除外;它包含的三個參數(事件類型、事件方法、布爾值)中的布爾值決定了該方法在那個階段觸發;默認值false在冒泡階段觸發,true在捕獲階段觸發。

4.如何阻止事件冒泡?如何阻止默認事件?

  • IE事件模型中:
    1.如何阻止事件冒泡?
    對event對象下的cancelBubble進行賦值
    2.如何阻止默認行為?
    對event對象下的returnValue進行賦值

  • DOM2事件流中
    1.如何阻止事件冒泡?
    對event對象使用stopPropagation()方法
    2.如何阻止默認事件?
    對event對象使用preventDefault()方法

5.有如下代碼,需求當點擊每一個li的時候控制臺顯示該元素文本內容。不考慮兼容性

<ul class="ct">
<li>這里是</li>
<li>饑人谷</li>
<li>前端6班</li>
</ul>
<script>
//todo ...
</script>

代碼

function $(e){
    if(document.querySelectorAll(e).length > 1){
        return document.querySelectorAll(e);
    }else{
        return document.querySelector(e);
    }
}
var li = $('li')
for(var i = 0; i < li.length; i ++){
    li[i].addEventListener('click', function(){
        console.log(this.innerText)
    })
}

6.補全代碼,要求

  • 當點擊按鈕開頭添加時,在</li>這里</li>元素添加一個新元素,內容為用戶輸入的非法空字符串;當點擊結尾添加時在最后一個li元素后添加用戶輸入的非法空字符串

  • 當點擊每一個元素li時候控制臺展示該元素的文本內容

      <ul class="ct">
      <li>這里是</li>
      <li>饑人谷</li>
      <li>任務班</li>
      </ul>
      <input class="ipt-add-content" placeholder="添加內容"/>
      <button id="btn-add-start">開頭添加</button>
      <button id="btn-add-end">結尾添加</button>
      <script>
      //你的代碼
      </script>
    

代碼

// 封裝一個函數,用來獲取相對應的DOM-node
function $(ele){
if(document.querySelectorAll(ele).length>1){
    return document.querySelectorAll(ele)
}
else{
    return document.querySelector(ele)
}
}


var star=$('#btn-add-start');
var end=$('#btn-add-end');
var content=$('.ipt-add-content');
var ct=$('.ct');
var li=$('.ct>li');



// 點擊尾部添加

end.addEventListener('click',function(){
var li=document.createElement('li');
ct.appendChild(li);
li.innerText=content.value;
content.value='';  //歸零清空輸入框內容
})

// 點擊頭部添加

star.addEventListener('click',function(){
var li=document.createElement('li');
ct.insertBefore(li,ct.firstChild);
li.innerText=content.value;
content.value='';
})

// 點擊console文本內容
li.forEach(function(ele){
ele.addEventListener('click',function(){
    console.log(ele.innerText)
    })

})

7.補全代碼,要求:當鼠標放置在li元素上,會在img-preview里展示當前li元素的data-img對應的圖片。

    <ul class="ct">
    <li data-img="1.png">鼠標放置查看圖片1</li>
    <li data-img="2.png">鼠標放置查看圖片2</li>
    <li data-img="3.png">鼠標放置查看圖片3</li>
    </ul>
    <div class="img-preview"></div>
    <script>
    //你的代碼
    </script>

代碼

function $(ele){
        if(document.querySelectorAll(ele).length>0){
            return document.querySelectorAll(ele);
        }
        else{
            return document.querySelector(ele);
        }

    }


    var ct=$('.ct');
    var ImgPreview=$('.img-preview');
    var list=$('.ct>li');


    list.forEach(function(ele){


        
        ele.addEventListener('mouseenter',function(){
            var img=document.createElement('img');
            img.src=ele.getAttribute('data-img');
            ImgPreview[0].appendChild(img);
        })
        ele.addEventListener('mouseleave',function(ele){
            ImgPreview[0].innerHTML=''
        })
    })
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容

  • JavaScript 程序采用了異步事件驅動編程模型。在這種程序設計風格下,當文檔、瀏覽器、元素或與之相關的對象發...
    劼哥stone閱讀 1,272評論 3 11
  • 如何批量操作 css 如何獲取 DOM 計算后的樣式 使用getComputedStyle獲取元素計算后的樣式 實...
    _Dot912閱讀 575評論 1 3
  • 事件 JavaScript和HTML的交互是通過事件實現的。JavaScript采用異步事件驅動編程模型,當文檔、...
    徐國軍_plus閱讀 595評論 0 2
  • 一、問答 1. dom對象的innerText和innerHTML有什么區別? innerHTML: 也就是從對象...
    饑人谷_羅偉恩閱讀 611評論 0 2
  • 題目1: DOM0 事件和DOM2級在事件監聽使用方式上有什么區別? 事件處理程序我們也稱之為事件偵聽器(list...
    Taaaaaaaurus閱讀 182評論 0 1