事件

題目1: DOM0 事件和DOM2級(jí)在事件監(jiān)聽使用方式上有什么區(qū)別垫卤?

所謂的0級(jí)dom與2級(jí)dom事件就是不同版本間的差異横堡,具體的說(shuō)就是莺丑,對(duì)于不同的dom級(jí)別,在形式上和功能上都是有差異的结榄。

形式上區(qū)別:
  • dom0 事件是指定的事件處理程序被認(rèn)為是元素的方法中贝。
    就是將一個(gè)函數(shù)賦值給一個(gè)事件處理程序?qū)傩裕總€(gè)元素包括window和document都有自己處理程序的屬性)臼朗。
    例如: onclick onmouseover onmouseout 等雄妥,都是on+type
    這個(gè)時(shí)候的事件處理程序在元素的作用域中執(zhí)行。
    ···
    <button id="btn">提交</button>
    <button id="btn2" class="bbb">注冊(cè)</button>
    ···
var btn= document.getElementById('btn')
btn.onclick= function(){      //DOM0的表示形式     屬性名要+ on
  
  console.log('提交成功')
}

提交成功

var btn= document.getElementById('btn2')
btn.addEventListener('click',function(e){    //DOM2的表示形式
   console.log(this)
   console.log(e)
  console.log('注冊(cè)成功了')
});
<button id="btn2" class="bbb">注冊(cè)</button>
MouseEvent {isTrusted: true, screenX: 72, screenY: 84, clientX: 72, clientY: 18…}
注冊(cè)成功了
  • ’DOM2級(jí)事件’定義了兩個(gè)方法依溯,用于處理指定和刪除事件處理程序的操作:addEventListener()和removeEventListener();
    所有的DOM節(jié)點(diǎn)都包含這兩種方法老厌。
    它們都接受3個(gè)參數(shù):要處理的事件名,事件處理程序的函數(shù)黎炉,和一個(gè)布爾值枝秤。
    最后一個(gè)參數(shù):如果為true,表示在捕獲階段調(diào)用事件處理程序慷嗜,如果是false淀弹,表示在冒泡階段調(diào)用事件處理程序。
功能上區(qū)別:

dom0 是一個(gè)函數(shù)賦值給一個(gè)時(shí)間處理程序?qū)傩裕╫nclick等)庆械,多次賦值后面的會(huì)覆蓋前面薇溃。
dom2 中傳遞多個(gè)參數(shù),調(diào)用多次回調(diào)函數(shù)缭乘,添加多個(gè)事件沐序,函數(shù)不會(huì)出現(xiàn)覆蓋

參考1
參考2
參考文章

題目2: attachEvent與addEventListener的區(qū)別?
區(qū)別 attachEvent addEventListener
參數(shù)個(gè)數(shù)不同 有2個(gè)參數(shù)(函數(shù)名稱堕绩,function(){}) 有3個(gè)參數(shù)(事件類型策幼,function(){}, true/false)
第一個(gè)參數(shù)的意義不同 事件處理函數(shù)的名稱on+type 事件的類型type
事件的作用域不同 全局變量?jī)?nèi)運(yùn)行,this->window 元素本身,this->觸發(fā)元素
一個(gè)事件有多個(gè)事件處理時(shí)的執(zhí)行順序不同 無(wú)規(guī)律順序 按照添加順序執(zhí)行
事件處理階段 只在冒泡階段 true 奴紧,在捕獲階段處理 特姐;默認(rèn)為false ,在冒泡階段處理
題目3: 解釋IE事件冒泡和DOM2事件傳播機(jī)制黍氮?

先解釋幾個(gè)詞:

  • 事件: 由用戶或?yàn)g覽器自身執(zhí)行的某種動(dòng)作唐含,是某種行為或者觸發(fā)浅浮,比如: 點(diǎn)擊click 鼠標(biāo)滑過(guò)mouseover ...

  • javascript 和html就是通過(guò)事件實(shí)現(xiàn)交互的。

  • 事件處理程序(事件監(jiān)聽器):執(zhí)行的某種的動(dòng)作(點(diǎn)擊捷枯、加載脑题、鼠標(biāo)等其他行為),響應(yīng)這個(gè)動(dòng)作(事件)的方法

IE事件冒泡 是 事件開始由具體的元素铜靶,逐級(jí)向上傳播到不具體的元素(由具體到不具體)

DOM2事件傳播機(jī)制
DOM2級(jí)事件規(guī)定事件流包含3個(gè)階段:
(1)事件捕獲階段: 由外層不具體的 逐級(jí) 向內(nèi)傳播到具體的元素(由外到內(nèi))
(2)處于目標(biāo)階段 ,事件本身
(3)事件冒泡階段: 由具體的逐級(jí)向外到不具體的元素(由內(nèi)到外)

事件捕獲

事件冒泡
DOM事件流
  • 事件流: 從頁(yè)面接收事件的順序他炊。
題目4:如何阻止事件冒泡争剿? 如何阻止默認(rèn)事件?

阻止事件冒泡
類似中斷 痊末,取消事件冒泡后蚕苇, 事件不會(huì)繼續(xù)往外傳播,外面監(jiān)聽不到
cancelBubble=true用于ie的阻止冒泡事件凿叠,
event.stopPropagation()用于firefox和chrome等其他瀏覽器涩笤。

.box{
  background: red;
  width: 200px;
  height: 200px;
}

.box1{
  background: green;
  width: 120px;
  height: 100px;
}

p{
  background: yellow
}
 <div class="box">
    
    <div class="box1">
      
      <p>你好</p>
      
    </div>
    
  </div>
  

var p= document.querySelector('p');
   p.addEventListener('click',function(e){
     
     console.log('p 標(biāo)簽')
     //console.log(e)   //返回事件的相關(guān)信息 ,包括事件元素盒件、事件類型等
     
   })
   
 
   
   var box1= document.querySelector('.box1');
   box1.addEventListener('click',function(e){
   
     e.stopPropagation();    //阻止事件冒泡
      console.log('box1  djakd')   
     
   })
   
   var box= document.querySelector('.box');
   box.addEventListener('click',function(){
     
     console.log('box djkah')
     
   })


冒泡的過(guò)程: p——>div.box1——> div.box
對(duì)box1的事件阻止冒泡后蹬碧,不會(huì)輸出 box的內(nèi)容

輸出:
p 標(biāo)簽
 box1  djakd

阻止默認(rèn)操作
作用是取消一個(gè)目標(biāo)元素的默認(rèn)行為。
既然是說(shuō)默認(rèn)行為炒刁,當(dāng)然是元素必須有默認(rèn)行為才能被取消恩沽,如果元素本身就沒有默認(rèn)行為,調(diào)用當(dāng)然就無(wú)效了翔始。
什么元素有默認(rèn)行為呢罗心?如鏈接<a>跳轉(zhuǎn)src地址,提交按鈕<input type=”submit”>提交form等城瞎。
e.preventDefault()用于firefox和chrome等其他瀏覽器渤闷。
IE 則是使用 e.returnValue = false;

首先是默認(rèn)事件,preventDefault() 才能生效
 <a   id="link" href="baidu.com" >官網(wǎng)</a>
  

 document.querySelector('#link').addEventListener('click',function(e){
              
          e.preventDefault();// 阻止跳轉(zhuǎn)頁(yè)面
          console.log('沒有跳轉(zhuǎn)')
   })
   
效果: 點(diǎn)擊鏈接脖镀,沒有跳轉(zhuǎn)

輸出:
沒有跳轉(zhuǎn)
 
題目5:有如下代碼飒箭,要求當(dāng)點(diǎn)擊每一個(gè)元素li時(shí)控制臺(tái)展示該元素的文本內(nèi)容。不考慮兼容
ul,li{
  
  list-style: none;
  
}
ul{
  border: 1px solid;
  padding: 0;
}
ul li{
  
  border: 1px solid #ccc;
  margin: 8px 2px
}
<ul class="ct">
    <li>這里是</li>
    <li>饑人谷</li>
    <li>前端6班</li>
</ul>
<script>
var ct= document.querySelector('.ct');
   ct.addEventListener('click',function(e){
     
          var b=e.target.innerText;
          console.log(b)
   })
  
</script>

代碼

題目6: 補(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)容卷员。

<ul class="ct">
    <li>這里是</li>
    <li>饑人谷</li>
    <li>任務(wù)班</li>
</ul>
<input class="ipt-add-content" placeholder="添加內(nèi)容"/>
<button id="btn-add-start">開頭添加</button>
<button id="btn-add-end">結(jié)尾添加</button>
<script>
// 事件代理盈匾,添加新的元素,就不用再綁定
var ct= document.querySelector('.ct');
ct.addEventListener('click',function(e){   //e事件對(duì)象用來(lái)找到目標(biāo)元素,表示li
        //  console.log(e)
          var b=e.target;                   //target屬性: 目標(biāo)元素(標(biāo)簽)li
          if(b.tagName.toLowerCase()==='li'){//避免點(diǎn)擊到li以外的區(qū)域毕骡,做一個(gè)判斷削饵,當(dāng)當(dāng)前的對(duì)象的目標(biāo)元素是li時(shí)岩瘦,
       
              console.log(b.innerText)        // 輸出控制臺(tái)   目標(biāo)元素的內(nèi)容
       
           }
   })
   
   
  var ipt= document.querySelector('.ipt-add-content')
  var btn= document.querySelector('#btn-add-start');

   btn.addEventListener('click',function(){
        
        var li= document.createElement('li');// 添加一個(gè)新的li
        
        if(ipt.value.length>0){
           li.innerText= ipt.value;                // 獲取輸入框的內(nèi)容給當(dāng)前的這個(gè)li 
                                                //在添加li 到開始位置
           ct.insertBefore(li,ct.firstElementChild);  //添加的新節(jié)點(diǎn),添加的節(jié)點(diǎn)位置之前   //ct.firstElementChild  為ul的開頭第一個(gè)子元素
       }
   })
      
  
  var btn= document.querySelector('#btn-add-end');
      btn.addEventListener('click',function(){
        
       var li= document.createElement('li')
       if(ipt.value.length>0){
          li.innerText= ipt.value;
       
          ct.appendChild(li); 
        
        }
  })
</script>
  

代碼

題目7: 補(bǔ)全代碼窿撬,要求:當(dāng)鼠標(biāo)放置在li元素上启昧,會(huì)在img-preview里展示當(dāng)前l(fā)i元素的data-img對(duì)應(yīng)的圖片。
<ul class="ct">
    <li data-img="1.png">鼠標(biāo)放置查看圖片1</li>
    <li data-img="2.png">鼠標(biāo)放置查看圖片2</li>
    <li data-img="3.png">鼠標(biāo)放置查看圖片3</li>
</ul>
<div class="img-preview"></div>
var ct= document.querySelector('.ct');
var images= document.querySelector('.img-preview')

ct.addEventListener('mouseover',function(e){
      var danli=e.target; 
      if(danli.tagName.toLowerCase()==='li'){
   // console.log(this)
      
      var path=danli.getAttribute('data-img')
      
      
     //如果傳入的元素是文本的話  可以直接用 innerText傳入
     // 但是 如果是圖片的話劈伴, 沒法獲取文本  
    // 所以可以用innerHTML=‘可以將這個(gè)標(biāo)簽加到HTML中密末,即而可以運(yùn)行’
 
   // console.log(path)
    images.innerHTML='![](' + path + ')'
          
   //  console.log(images.innerHTML)
     
     }
})

代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市跛璧,隨后出現(xiàn)的幾起案子严里,更是在濱河造成了極大的恐慌,老刑警劉巖追城,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刹碾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡座柱,警方通過(guò)查閱死者的電腦和手機(jī)迷帜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)色洞,“玉大人戏锹,你說(shuō)我怎么就攤上這事』鹬睿” “怎么了景用?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)惭蹂。 經(jīng)常有香客問(wèn)我伞插,道長(zhǎng),這世上最難降的妖魔是什么盾碗? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任媚污,我火速辦了婚禮,結(jié)果婚禮上廷雅,老公的妹妹穿的比我還像新娘耗美。我一直安慰自己,他們只是感情好航缀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布商架。 她就那樣靜靜地躺著,像睡著了一般芥玉。 火紅的嫁衣襯著肌膚如雪蛇摸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天灿巧,我揣著相機(jī)與錄音赶袄,去河邊找鬼揽涮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛饿肺,可吹牛的內(nèi)容都是我干的蒋困。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼敬辣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼雪标!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起溉跃,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤村刨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后喊积,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡玄妈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年乾吻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拟蜻。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绎签,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出酝锅,到底是詐尸還是另有隱情诡必,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布搔扁,位于F島的核電站爸舒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏稿蹲。R本人自食惡果不足惜扭勉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苛聘。 院中可真熱鬧涂炎,春花似錦、人聲如沸设哗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)网梢。三九已至震缭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間战虏,已是汗流浹背蛀序。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工欢瞪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人徐裸。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓遣鼓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親重贺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子骑祟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.何謂事件 用戶和網(wǎng)頁(yè)交互時(shí)的行為,動(dòng)作,稱之為事件; 2.監(jiān)視事件 現(xiàn)實(shí)生活中,為了監(jiān)視車輛是否違章气笙,通過(guò)在紅...
    草鞋弟閱讀 608評(píng)論 0 0
  • 題目1: DOM0 事件和DOM2級(jí)在事件監(jiān)聽使用方式上有什么區(qū)別次企? 事件處理程序 我們也稱之為事件偵聽器(lis...
    阿魯提爾閱讀 325評(píng)論 0 1
  • 1:DOM0事件和DOM2級(jí)在事件監(jiān)聽使用方式上有什么區(qū)別? 瀏覽器端的JavaScript采用的是事件驅(qū)動(dòng)的異步...
    饑人谷_bigJiao閱讀 280評(píng)論 0 0
  • 事件 JavaScript和HTML的交互是通過(guò)事件實(shí)現(xiàn)的潜圃。JavaScript采用異步事件驅(qū)動(dòng)編程模型缸棵,當(dāng)文檔、...
    徐國(guó)軍_plus閱讀 581評(píng)論 0 2
  • 如何批量操作 css 如何獲取 DOM 計(jì)算后的樣式 使用getComputedStyle獲取元素計(jì)算后的樣式 實(shí)...
    _Dot912閱讀 559評(píng)論 1 3