JavaScript事件對象詳解

在觸發(fā)DOM上的某個(gè)事件時(shí)杰妓,會(huì)產(chǎn)生一個(gè)事件對象event鹅搪。這個(gè)對象中包含著所有與事件有關(guān)的信息禀苦。包括導(dǎo)致事件的元素蔓肯,事件的類型以及其他與特定事件相關(guān)的信息。

  • 舉例
    鼠標(biāo)操作導(dǎo)致的事件對象中振乏,會(huì)包含鼠標(biāo)位置的信息蔗包,
    鍵盤操作導(dǎo)致的事件對象中,會(huì)包含按下的鍵有關(guān)的信息慧邮,

所有瀏覽器都支持event對象调限,event對象會(huì)傳入DOM0級舟陆,DOM2級,HTML指定的事件處理程序中耻矮,但支持的方式不同秦躯,所以也會(huì)涉及跨瀏覽器的部分。我們可以結(jié)合HTML DOM Event 對象來學(xué)習(xí)裆装。
我們知道踱承,特定的事件會(huì)有自己獨(dú)特的屬性,我們這里只看一些共有的屬性


1.標(biāo)準(zhǔn)瀏覽器

event:在支持至少DOM2級的瀏覽器內(nèi)哨免,無論使用html特性指定茎活,dom0級,2級琢唾,該對象都是該事件內(nèi)置對象载荔,可以在事件處理函數(shù)內(nèi)直接使用。
this:在支持至少DOM2級的瀏覽器內(nèi)采桃,無論使用html特性指定懒熙,dom0級,2級普办,都是指向當(dāng)前正在處理事件的那個(gè)元素工扎。
列舉所有事件的事件對象,都會(huì)有的成員泌豆。

列舉所有事件的事件對象定庵,共同擁有的成員。

屬性方法 類型 讀寫 描述
bubbles Blooean 只讀 表明事件是否是起泡事件類型
cancelable Blooean 只讀 表明是否可以取消事件的默認(rèn)行為
currentTarget Element 只讀 其事件處理程序當(dāng)前正在處理事件的那個(gè)元素
target Element 只讀 事件的目標(biāo)
eventPhase Integar 只讀 調(diào)用事件處理程序的階段:1表示捕獲階段2表示處于目標(biāo)3表示冒泡階段
trusted Blooean 只讀 為true表示事件是瀏覽器生成的踪危,為false表示事件是由開發(fā)人員通過js創(chuàng)建的
type String 只讀 被觸發(fā)的事件的類型
stopPropagation() Function 只讀 取消事件的進(jìn)一步捕獲或冒泡蔬浙,如果bubbels為true,則可以使用這個(gè)方法
preventDefault() Function 只讀 取消事件的默認(rèn)行為,如果cancelable為true,則可以使用這個(gè)方法
initEvent() Event 只讀 初始化新創(chuàng)建的 Event 對象的屬性
  • currentTarget:始終等于this對象裆蒸,隨著事件冒泡或者捕獲曙聂,他的值等于捕獲或冒泡到的上級元素。

  • target :觸發(fā)此事件的元素。

  • type
    可以利用type屬性為一個(gè)元素同時(shí)添加多類事件處理程序。
    采用dom0級測試

var btn=document.getElementById('myBtn');
 var handler=function(){
  switch(event.type){
      case "click":
          alert("clicked");
          break;
      case "mouseover":
          event.target.style.background='red';
          break;
      case "mouseout":
          event.target.style.background='yellow';
          break;
  }
};
btn.onclick=handler;
btn.onmouseover=handler;
btn.onmouseout=handler;
  • eventPahse
    用來確定事件當(dāng)前位于事件流的哪個(gè)階段
var btn=document.getElementById('Mybtn');//body內(nèi)的div
  var wrap=document.getElementById('wrap');//body
  function handler(){
      alert(event.eventPhase)
  };
  //單擊btn
  btn.addEventListener('click',handler,false);//2處于目標(biāo)對象
  wrap.addEventListener('click',handler,false);//3冒泡階段
  wrap.addEventListener('click',handler,true);//1捕獲
  • cancelable、preventDefault()
    只有cancelable為true時(shí)亮隙,才可以使用preventDefault()方法,來取消其默認(rèn)行為垢夹。
    ie低版本通過:event.returnValue=false來實(shí)現(xiàn)
<a  id="myherf">百度</a>
  var Link=document.getElementById("myherf");
  Link.onclick=function(){
     event.preventDefault();
  }

這樣單擊百度時(shí)溢吻,并不會(huì)跳轉(zhuǎn)到百度的頁面。

  • stopPropagation()
    立即停止事件在dom層次中的傳播,即取消進(jìn)一步的事件捕獲或冒泡促王。
    ie通過event.cancelBubble=true;阻止傳播
 function handler(){
     alert(event.type);
     event.stopPropagation();
 };

event對象只有在事件處理程序執(zhí)行期間犀盟,才會(huì)存在,執(zhí)行完畢即銷毀蝇狼。


2.IE中的事件對象

在IE8及其以前版本的瀏覽器是不兼容DOM2級的阅畴,但是還是可以使用dom0級的方法和自帶的方法添加事件處理程序。
event:

var div=document.getElementById("test");
  div.onclick=function(){
      var event=window.event; //event為window對象
      alert(event.type);
  }

event 對象必須作為 window 對象的一個(gè)屬性迅耘。event對象作為事件處理程序的內(nèi)部對象贱枣。可以直接使用event.type颤专。
html指定:event對象同樣也包含于創(chuàng)建他的事件相關(guān)的屬性和方法冯事。

this:
html指定
html標(biāo)簽上直接使用this,那么等于正在處理事件的那個(gè)元素血公。如果是使用標(biāo)簽上指定函數(shù),那么函數(shù)內(nèi)的this指的是window缓熟。
dom0級方法中
this等于正在處理事件的那個(gè)元素累魔。
使用IE的專屬 attachEvent()
this等于window

  • IE的event包含的對象與方法
屬性方法 類型 讀寫 說明
cancelBubble Blooean 讀/寫 默認(rèn)值為false,但將其設(shè)置為true就可以取消事件冒泡够滑,與DOM中stopPropagation()的方法作用相同
returnvalue Blooean 讀/寫 默認(rèn)值為true垦写,但將其設(shè)置為fasle,就可以取消事件的默認(rèn)行為彰触,與DOM中的preventDefault()方法的作用相同
srcElement Element 只讀 事件的目標(biāo)梯投,與DOM中的target屬性相同
  • returnvalue
    var div=document.getElementById("test");
    div.onclick=function(){
        window.event.returnValue=false;                
    }

但是沒有辦法判定默認(rèn)事件能否被取消。

  • cancelBubble
var div=document.getElementById("test");
    div.onclick=function(){
        alert('ok')
        window.event.cancelBubble=true;        
    }

因?yàn)镮E8及以前只支持冒泡所以只能取消冒泡况毅。

既然事件對象存在瀏覽器兼容問題分蓖,那么封裝一個(gè)跨瀏覽器的事件對象就很有必要!
跨瀏覽器的事件對象我在前面的JavaScript事件——事件冒泡尔许,事件捕獲么鹤,事件綁定與解綁,事件委托的文章末尾已經(jīng)給出過了味廊。

謝謝觀看U籼稹!余佛!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柠新,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辉巡,更是在濱河造成了極大的恐慌恨憎,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件红氯,死亡現(xiàn)場離奇詭異框咙,居然都是意外死亡咕痛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門喇嘱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茉贡,“玉大人,你說我怎么就攤上這事者铜∏簧ィ” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵作烟,是天一觀的道長愉粤。 經(jīng)常有香客問我,道長拿撩,這世上最難降的妖魔是什么衣厘? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮压恒,結(jié)果婚禮上影暴,老公的妹妹穿的比我還像新娘。我一直安慰自己探赫,他們只是感情好型宙,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伦吠,像睡著了一般妆兑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上毛仪,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天搁嗓,我揣著相機(jī)與錄音,去河邊找鬼箱靴。 笑死谱姓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刨晴。 我是一名探鬼主播屉来,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼狈癞!你這毒婦竟也來了茄靠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤蝶桶,失蹤者是張志新(化名)和其女友劉穎慨绳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脐雪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年厌小,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片战秋。...
    茶點(diǎn)故事閱讀 40,742評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡璧亚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脂信,到底是詐尸還是另有隱情癣蟋,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布狰闪,位于F島的核電站疯搅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏埋泵。R本人自食惡果不足惜幔欧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丽声。 院中可真熱鬧琐馆,春花似錦、人聲如沸恒序。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歧胁。三九已至,卻和暖如春厉碟,著一層夾襖步出監(jiān)牢的瞬間喊巍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工箍鼓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留崭参,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓款咖,卻偏偏與公主長得像何暮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子铐殃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評論 2 361

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

  • 聲明:本文來源于http://www.webzsky.com/?p=731我只是在這里作為自己的學(xué)習(xí)筆記整理一下(...
    angryyan閱讀 7,032評論 1 6
  • JavaScript 程序采用了異步事件驅(qū)動(dòng)編程模型海洼。在這種程序設(shè)計(jì)風(fēng)格下,當(dāng)文檔富腊、瀏覽器坏逢、元素或與之相關(guān)的對象發(fā)...
    劼哥stone閱讀 1,257評論 3 11
  • 一是整、問答 1. dom對象的innerText和innerHTML有什么區(qū)別肖揣? innerHTML: 也就是從對象...
    饑人谷_羅偉恩閱讀 600評論 0 2
  • 事件流 事件流描述的是從頁面中接受事件的順序。但是IE和Netscape開發(fā)團(tuán)隊(duì)提出了差不多相反的事件流的概念浮入。I...
    losspm閱讀 265評論 0 0
  • 文/陳安若 7.7上映的《神偷奶爸3》又名《卑鄙的我3》舵盈,一大波萌死人滴小黃人又雙叒來啦陋率,蠢萌犯賤又不乏機(jī)智勇敢,...
    陳安若閱讀 1,311評論 0 0