什么是事件、事件代理和委托

什么是事件畅哑?

事件的本質(zhì)是程序各個組成部分之間的一種通信方式肴楷,也是異步編程的一種實現(xiàn)嗎,DOM支持大量的事件荠呐。

1.EventTarget接口

Dom的事件操作(監(jiān)聽和觸發(fā))赛蔫,都定義在EventTarget接口,所有節(jié)點對象都部署了這個接口泥张,其他一些需要事件通信的瀏覽器內(nèi)置對象(比如呵恢,XMLHttpRequest ,AudioNode,AudioContext)也部署了這個接口

該接口主要提供三個實例方法。

1.1EventTarget.addEventListener()? ?: 綁定事件的監(jiān)聽函數(shù)

EventTarget.addEventListener()用于在當前節(jié)點或?qū)ο笊厦拇矗x一個特定事件的監(jiān)聽函數(shù)渗钉,一旦這個事件發(fā)生,就會執(zhí)行監(jiān)聽函數(shù)钞钙,該方法沒有返回值鳄橘。

target.addEventListrener(type,listener[,useCapture]);

該方法接受三個參數(shù):

type:事件名稱,大小寫敏感

listener:監(jiān)聽函數(shù)芒炼,事件發(fā)生時瘫怜,會調(diào)用該監(jiān)聽函數(shù)

useCapture:布爾值,表示監(jiān)聽函數(shù)是否在捕獲階段觸發(fā)本刽,默認為false(監(jiān)聽函數(shù)只在冒泡階段被觸發(fā))鲸湃,該參數(shù)可選

addEventListener方法可以為針對當前對象的同一個事件赠涮,添加多個不同的監(jiān)聽函數(shù),這些函數(shù)按照添加順序觸發(fā)暗挑,即先添加先觸發(fā)世囊,如果為同一個事件多次添加同一個監(jiān)聽函數(shù),該函數(shù)只會執(zhí)行一次窿祥,多余的添加將自動被去除(不必使用removeEventlistener方法手動去除)

1.2EventTarget.removeEventListener()? :移除事件的監(jiān)聽函數(shù)

EventTarget.removeEventListener方法用來移除addEventListener方法添加的事件監(jiān)聽函數(shù)株憾,該方法沒有返回值


1.3dispatchEvent :觸發(fā)事件

EventTarget.dispatchEvent方法在當前節(jié)點上觸發(fā)指定事件,從而觸發(fā)監(jiān)聽函數(shù)的執(zhí)行晒衩,該方法返回一個布爾值嗤瞎,只要有一個監(jiān)聽函數(shù)調(diào)用了Event.preventDefault(),則返回值為false,否則為true

target.dispatchEvent(event)

dispatchEvent方法的參數(shù)是一個Event對象的實例

2.監(jiān)聽函數(shù)

瀏覽器的事件模型,就是通過監(jiān)聽函數(shù)(listener)對事件做出反應听系,事件發(fā)生后贝奇,瀏覽器監(jiān)聽到了這個事件,就會執(zhí)行對應的監(jiān)聽函數(shù)靠胜,這是事件驅(qū)動編程模式的主要編程方式

2.1html的on-屬性

<body onload="doSomething()">

2.2元素節(jié)點的事件屬性

元素節(jié)點的事件屬性掉瞳,同樣可以指定監(jiān)聽函數(shù)

window.onload=doSomething;

div.onclick=function(event){

console.log('觸發(fā)事件‘);

}

事件的傳播

一個事件發(fā)生后浪漠,會在子元素和父元素之間傳播陕习,這種傳播分為三個階段

第一階段:從window對象傳到目標節(jié)點(上層傳到底層),稱為捕獲階段

第二階段:在目標節(jié)點上觸發(fā)址愿,稱為“目標階段

第三階段:從目標節(jié)點傳到回window對象(從底層傳回上層)稱為冒泡階段

事件代理:

由于事件會在冒泡階段向上傳播到父節(jié)點该镣,因此可以把子節(jié)點的監(jiān)聽函數(shù)定義在父節(jié)點上,由父節(jié)點的監(jiān)聽函數(shù)統(tǒng)一處理多個子元素的事件响谓,這種方法叫做事件的代理

var ul = document.querySelector('ul');

ul.addEventListener('click', function (event) {

if (event.target.tagName.toLowerCase() === 'li') {

// some code

} });

click事件的監(jiān)聽函數(shù)定義在

    節(jié)點损合,但是實際上,它處理的是子節(jié)點
  • 的click事件娘纷。這樣做的好處是嫁审,只要定義一個監(jiān)聽函數(shù),就能處理多個子節(jié)點的事件赖晶,而不用在每個
  • 節(jié)點上定義監(jiān)聽函數(shù)律适。而且以后再添加子節(jié)點,監(jiān)聽函數(shù)依然有效嬉探。

如果希望事件到某個節(jié)點為止擦耀,不再傳播,可以使用事件對象的stopPropagation方法涩堤。

事件委托:

就是把一個元素響應事件的函數(shù)委托到另一個元素眷蜓,利用冒泡的原理,把事件加到父級上胎围,觸發(fā)執(zhí)行效果

Jquery中事件委托主要的幾種實現(xiàn)方法:$.on,? $.delegate $.live

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吁系,一起剝皮案震驚了整個濱河市德召,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汽纤,老刑警劉巖上岗,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蕴坪,居然都是意外死亡肴掷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門背传,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呆瞻,“玉大人,你說我怎么就攤上這事径玖〕掌ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵梳星,是天一觀的道長赞赖。 經(jīng)常有香客問我,道長冤灾,這世上最難降的妖魔是什么前域? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮瞳购,結(jié)果婚禮上话侄,老公的妹妹穿的比我還像新娘亏推。我一直安慰自己学赛,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布吞杭。 她就那樣靜靜地躺著盏浇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芽狗。 梳的紋絲不亂的頭發(fā)上绢掰,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音童擎,去河邊找鬼滴劲。 笑死,一個胖子當著我的面吹牛顾复,可吹牛的內(nèi)容都是我干的班挖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼芯砸,長吁一口氣:“原來是場噩夢啊……” “哼萧芙!你這毒婦竟也來了给梅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤双揪,失蹤者是張志新(化名)和其女友劉穎动羽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渔期,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡运吓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了疯趟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羽德。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖迅办,靈堂內(nèi)的尸體忽然破棺而出宅静,到底是詐尸還是另有隱情,我是刑警寧澤站欺,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布姨夹,位于F島的核電站,受9級特大地震影響矾策,放射性物質(zhì)發(fā)生泄漏磷账。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一贾虽、第九天 我趴在偏房一處隱蔽的房頂上張望逃糟。 院中可真熱鬧,春花似錦蓬豁、人聲如沸绰咽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽取募。三九已至,卻和暖如春蟆技,著一層夾襖步出監(jiān)牢的瞬間玩敏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工质礼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留旺聚,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓眶蕉,卻偏偏與公主長得像砰粹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子妻坝,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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

  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的。 ??事件厘贼,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,474評論 1 11
  • Dom事件 事件是一種異步編程的實現(xiàn)方式界酒,本質(zhì)上是程序各個組成部分之間的通信。DOM支持大量的事件 (一) Eve...
    woow_wu7閱讀 1,767評論 0 1
  • 事件是一種異步編程的實現(xiàn)方式嘴秸,本質(zhì)上是程序各個組成部分之間的通信毁欣。DOM支持大量的事件,本節(jié)介紹DOM的事件編程岳掐。...
    許先生__閱讀 931評論 0 3
  • 事件是一種異步編程的實現(xiàn)方式凭疮,本質(zhì)上是程序各個組成部分之間的通信。DOM支持大量的事件串述,本節(jié)介紹DOM的事件編程执解。...
    周花花啊閱讀 593評論 0 3
  • 以下文章為轉(zhuǎn)載,對理解JavaScript中的事件處理機制很有幫助纲酗,淺顯易懂衰腌,特分享于此。 什么是事件觅赊? 事件(E...
    jxyjxy閱讀 3,028評論 1 10