DOM事件

1胜宇、DOM0 事件和DOM2級在事件監(jiān)聽使用方式上有什么區(qū)別?

  • DOM0:onclick 只能綁定一個事件亮隙,綁定多個會產(chǎn)生覆蓋;不能設(shè)置參數(shù)垢夹,使用默認(rèn)的事件冒泡階段溢吻。
  • DOM2:addEventListener中有第3個參數(shù),attachEvent沒有果元。第3個參數(shù)傳遞的是false或true促王。這個參數(shù)可選,默認(rèn)是false而晒。
    false--表示事件處理將在冒泡階段執(zhí)行蝇狼。
    true--表示事件處理將在捕獲階段執(zhí)行。
  • 理論上倡怎,Event Listeners (addEventListener题翰、attachEvent(IE使用 ))可以無限增加事件監(jiān)聽給某個一元素。實(shí)際應(yīng)用的約束就是客戶端內(nèi)存的限制诈胜,這一點(diǎn)因每個瀏覽器而異豹障。

2、attachEvent與addEventListener的區(qū)別焦匈?

  • 參數(shù)個數(shù)不相同血公,addEventListener有三個參數(shù),attachEvent只有兩個缓熟,attachEvent添加的事件處理程序只能發(fā)生在冒泡階段累魔,addEventListener第三個參數(shù)可以決定添加的事件處理程序是在捕獲階段還是冒泡階段處理(我們一般為了瀏覽器兼容性都設(shè)置為冒泡階段)
  • 第一個參數(shù)意義不同,addEventListener第一個參數(shù)是事件類型(比如click够滑,load)垦写,而attachEvent第一個參數(shù)指明的是事件處理函數(shù)名稱(onclick,onload)
  • 事件處理程序的作用域不相同彰触,addEventListener的作用域是元素本身梯投,this是指的觸發(fā)元素,而attachEvent事件處理程序會在全局變量內(nèi)運(yùn)行况毅,this是window分蓖,所以會返回undefined,而不是元素id尔许。
  • 為一個事件添加多個事件處理程序時么鹤,執(zhí)行的順序不同。 addEventListener 會按照添加的順序執(zhí)行味廊。 attachEvent 添加多個事件處理程序時蒸甜,順序是無規(guī)律的棠耕。

3、 解釋IE事件冒泡和DOM2事件傳播機(jī)制柠新?

當(dāng)事件發(fā)生在某個文檔節(jié)點(diǎn)上時(即事件目標(biāo))昧辽,目標(biāo)的事件處理程序就會被觸發(fā)。此外目標(biāo)的每個祖先節(jié)點(diǎn)也有機(jī)會處理該事件登颓。

  • 2級DOM的事件傳播包含三個階段:
    捕捉階段(capturing)搅荞,事件從頂級文檔樹節(jié)點(diǎn)一級一級向下遍歷,直到到達(dá)該事件的目標(biāo)節(jié)點(diǎn)框咙。
    到達(dá)事件的目標(biāo)節(jié)點(diǎn)咕痛,執(zhí)行目標(biāo)節(jié)點(diǎn)的時間處理程序。
    事件起泡(bubbling)喇嘱,事件從目標(biāo)節(jié)點(diǎn)一級一級向上上溯茉贡,直到頂級文檔樹節(jié)點(diǎn)。
  • 相應(yīng)的者铜,2級DOM通過下面的兩個函數(shù)給節(jié)點(diǎn)對象添加和刪除事件處理函數(shù)腔丧。
    addEventListener(eventType, handler, propagate);
    removeEventListener(eventType, handler, propagate);
    三個參數(shù)意思分別如下:
    eventType: 即事件類型(不加on)。比如:"click"作烟。
    handler: 事件處理函數(shù)愉粤。傳入?yún)?shù)即為事件對象event。
    propagate: 是否只執(zhí)行捕獲和目標(biāo)節(jié)點(diǎn)兩個階段拿撩。true的話衣厘,只執(zhí)行1,2兩個階段压恒;false的話影暴,只指向2,3兩個階段探赫。
  • IE的事件傳播只包含上邊的2和3兩個階段
    相應(yīng)的型宙,IE通過下面兩個函數(shù)給節(jié)點(diǎn)對象添加和刪除事件處理函數(shù)。
    attachEvent(eventType, handler);
    detachEvent(eventType, handler);
    參數(shù)意思同2級DOM對應(yīng)的函數(shù)參數(shù)

4伦吠、如何阻止事件冒泡妆兑? 如何阻止默認(rèn)事件?

  • DOM瀏覽器
    阻止冒泡e.stopPropagation();
    阻止默認(rèn)事件event.preventDefault()
  • IE瀏覽器
    阻止冒泡e.cancelBubble = true;
    阻止默認(rèn)事件event.returnValue = false;
  • 使用 onmouseenter讨勤、onmouseleave等事件默認(rèn)阻止冒泡

5箭跳、有如下代碼晨另,要求當(dāng)點(diǎn)擊每一個元素li時控制臺展示該元素的文本內(nèi)容潭千。不考慮兼容

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

方法一(利用閉包):http://js.jirengu.com/kidog/1/edit?html,js,console,output
方法二(利用 this):http://js.jirengu.com/tehuq/1/edit?js,console,output

6、 補(bǔ)全代碼借尿,要求:

  • 當(dāng)點(diǎn)擊按鈕開頭添加時在<li>這里是</li>元素前添加一個新元素刨晴,內(nèi)容為用戶輸入的非空字符串屉来;當(dāng)點(diǎn)擊結(jié)尾添加時在最后一個 li 元素后添加用戶輸入的非空字符串.
  • 當(dāng)點(diǎn)擊每一個元素li時控制臺展示該元素的文本內(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>
//你的代碼
</script>
<script>
var ct=document.getElementsByClassName('ct')[0]
var addS=document.getElementById('btn-add-start')
var addE=document.getElementById('btn-add-end')
var lis=ct.getElementsByTagName('li')

function getEvent(){
  for(var i=0;i<lis.length;i++){
    lis[i].onclick=function(){
      console.log(this.innerHTML)
    }
  }
}
getEvent()

addS.onclick=function(){
  var ipt=document.getElementsByTagName('input')[0]
  if (ipt.value.replace(/(^s*)|(s*$)/g, "").length ==0) 
  {console.log('不能為空');return}
  var newLi=document.createElement('li')
  newLi.innerHTML=ipt.value
  ct.insertBefore(newLi,ct.firstChild)
  lis=ct.getElementsByTagName('li')
  getEvent()
}
addE.onclick=function(){
  var ipt=document.getElementsByTagName('input')[0]
  if (ipt.value.replace(/(^s*)|(s*$)/g, "").length ==0) 
  {console.log('不能為空');return}
  var newLi=document.createElement('li')
  newLi.innerHTML=ipt.value
  ct.appendChild(newLi)
  lis=ct.getElementsByTagName('li')
  getEvent()
}
</script>

預(yù)覽地址:http://js.jirengu.com/zacam/1/edit?html,js,console,output

7狈癞、 補(bǔ)全代碼茄靠,要求:當(dāng)鼠標(biāo)放置在li元素上,會在img-preview里展示當(dāng)前l(fā)i元素的data-img對應(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>
<script>
//你的代碼
</script>
<script>
var lis=document.getElementsByTagName('li')
var ct=document.getElementsByClassName('img-preview')[0]
var img1=document.createElement('img')
ct.appendChild(img1)

for(var i=0;i<lis.length;i++){
  lis[i].onmouseover=function(){
    img1.src=this.getAttribute('data-img')
  }
}
</script>

預(yù)覽鏈接:http://js.jirengu.com/bagix/2/edit
方法二:利用事件代理
預(yù)覽鏈接:http://js.jirengu.com/duseb/3/edit?html,js,output

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慨绳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子真竖,更是在濱河造成了極大的恐慌脐雪,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恢共,死亡現(xiàn)場離奇詭異战秋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)讨韭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門脂信,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人透硝,你說我怎么就攤上這事狰闪。” “怎么了濒生?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵尝哆,是天一觀的道長。 經(jīng)常有香客問我甜攀,道長秋泄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任规阀,我火速辦了婚禮恒序,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谁撼。我一直安慰自己歧胁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布厉碟。 她就那樣靜靜地躺著喊巍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪箍鼓。 梳的紋絲不亂的頭發(fā)上崭参,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機(jī)與錄音款咖,去河邊找鬼何暮。 笑死奄喂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的海洼。 我是一名探鬼主播跨新,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坏逢!你這毒婦竟也來了域帐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤是整,失蹤者是張志新(化名)和其女友劉穎俯树,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贰盗,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡许饿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舵盈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陋率。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖秽晚,靈堂內(nèi)的尸體忽然破棺而出瓦糟,到底是詐尸還是另有隱情,我是刑警寧澤赴蝇,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布菩浙,位于F島的核電站,受9級特大地震影響句伶,放射性物質(zhì)發(fā)生泄漏劲蜻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一考余、第九天 我趴在偏房一處隱蔽的房頂上張望先嬉。 院中可真熱鬧,春花似錦楚堤、人聲如沸疫蔓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衅胀。三九已至,卻和暖如春酥筝,著一層夾襖步出監(jiān)牢的瞬間滚躯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哀九,地道東北人剿配。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓搅幅,卻偏偏與公主長得像阅束,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子茄唐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

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

  • 一沪编、問答 1. dom對象的innerText和innerHTML有什么區(qū)別呼盆? innerHTML: 也就是從對象...
    饑人谷_羅偉恩閱讀 600評論 0 2
  • 1.dom對象的innerText和innerHTML有什么區(qū)別访圃? innerText是一個可寫屬性。將寫入的內(nèi)容...
    candy252324閱讀 542評論 0 0
  • 一、dom對象的innerText和innerHTML有什么區(qū)別饭宾? innerHTML返回的是從對象起始位置到終止...
    __Qiao閱讀 414評論 0 0
  • 1.dom對象的innerText和innerHTML有什么區(qū)別看铆? innerText是一個可寫屬性徽鼎,返回元素內(nèi)包...
    GarenWang閱讀 458評論 0 0
  • 你所謂的努力只是騙自己罷了——從脫離既勤奮又懶惰的陷阱開始 想改變自己的人很多,但能邁出那關(guān)鍵一步并堅(jiān)持不懈的卻很...
    Mr_Dollar閱讀 615評論 0 1