成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javascript事件

yuanxin / 2064人閱讀

摘要:事件的本質(zhì)是程序各組成之間的一種通訊方式,也是異步編程的一種實(shí)現(xiàn)。事件如的名稱,大小寫敏感。事件發(fā)生時(shí),就會(huì)執(zhí)行此函數(shù)。該對(duì)象有下列屬性布爾值,表示該事件是否在捕獲階段觸發(fā)監(jiān)聽函數(shù)。該方法主要用于移除添加的事件監(jiān)聽函數(shù)。

事件的本質(zhì)是程序各組成之間的一種通訊方式,也是異步編程的一種實(shí)現(xiàn)。
----摘自JavaScript標(biāo)準(zhǔn)參考教程

1.EventTarget接口

EventTarget是接收事件監(jiān)聽跟出發(fā)的接口。所有的節(jié)點(diǎn)對(duì)象都會(huì)有這個(gè)接口。
該接口提供三個(gè)實(shí)例方法。

 addEventListener:綁定監(jiān)聽事件
 removeEventListener:移除監(jiān)聽事件
 dispatchEvent:觸發(fā)事件

1.1 EventTarget.addEventListener()

   EventTarget.addEventListener()用于實(shí)現(xiàn)為節(jié)點(diǎn)或者對(duì)象綁定一個(gè)監(jiān)聽事件,一個(gè)對(duì)象或者節(jié)點(diǎn)可以綁定多個(gè)監(jiān)聽事件,但若每個(gè)監(jiān)聽事件的監(jiān)聽函數(shù)是同一個(gè)的話就只會(huì)執(zhí)行一次,其他函數(shù)會(huì)自動(dòng)被移除。

該方法接受三個(gè)參數(shù)。

target.addEventListener(type,listener[,userCapture]);
type:事件(如:click,focus)的名稱,大小寫敏感。
listener:監(jiān)聽函數(shù)(函數(shù)名)。事件發(fā)生時(shí),就會(huì)執(zhí)行此函數(shù)。
useCapture:布爾指,表示監(jiān)聽函數(shù)是否在捕獲階段觸發(fā),默認(rèn)值:false(函數(shù)只在冒泡時(shí)觸發(fā))

example 1:

oDiv=document.querySelector(".div1"); 
function eventFun(){ 
   console.log("監(jiān)聽事件") 
} 
oDiv.addEventListener("click",eventFun,false);

關(guān)于參數(shù)還有另外兩個(gè)情況
1.第二個(gè)參數(shù)除了監(jiān)聽函數(shù),還可以是具有handleEvent方法的對(duì)象
example 2:

oDiv.addEventListener("click",
{ handleEvent:function(){
console.log("handleEvent方法");
}
});

2.第三個(gè)參數(shù)除了布爾值useCapture,還可以是一個(gè)屬性配置對(duì)象。該對(duì)象有下列屬性

capture:布爾值,表示該事件是否在捕獲階段觸發(fā)監(jiān)聽函數(shù)。

once: 布爾值,表示監(jiān)聽函數(shù)只觸發(fā)一次,然后自動(dòng)移除。

passive:布爾值,表示監(jiān)聽函數(shù)不會(huì)調(diào)用事件的preventDefault方法。如果監(jiān)聽函數(shù)調(diào)用了,瀏覽器會(huì)自動(dòng)忽略這個(gè)要求,并在控制臺(tái)輸出一行警告。

1.2 EventTarget.removeEventListener()
該方法主要用于移除addEventListener添加的事件監(jiān)聽函數(shù)。該方法沒有返回值。用法與addEventListener()方法完全一值。

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

 EventTarget.dispatchEvent(event)  
   

example 3:

oDiv.addEventListener("click",eventFun,false);
var event = new Event("click);
oDiv.dispatchEvent(event);//自動(dòng)執(zhí)行click事件。
2.監(jiān)聽函數(shù)

瀏覽器的事件模型就是通過監(jiān)聽函數(shù)來對(duì)事件作出反應(yīng)的,瀏覽器監(jiān)聽到這個(gè)事件就會(huì)執(zhí)行對(duì)應(yīng)的監(jiān)聽函數(shù)。
javascript中有三種方法可以為事件綁定監(jiān)聽函數(shù)

2.1 html的on-屬性(事件名)

 
//這樣綁定的是函數(shù)名+(),這樣當(dāng)事件發(fā)生時(shí)就會(huì)立即執(zhí)行函數(shù)

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

div.onclick=function(){
  console.log("節(jié)點(diǎn)事件")
}

2.3 EventTarget.addEventListener()
使用方法同第一小節(jié)

2.4 總結(jié)
第一種方法違反了html與javascriot代碼分離的原則,不利于代碼分工,不推薦使用。
第二種方法,同一個(gè)事件只能定義一個(gè)監(jiān)聽函數(shù)。如果定義多次,后一次會(huì)把前面的覆蓋掉。不推薦使用。
第三種是比較推薦且官方指定的監(jiān)聽函數(shù)方法,原因如下:

1.同一個(gè)事件可以添加多個(gè)監(jiān)聽函數(shù)。
2.能夠指定在哪個(gè)階段觸發(fā)監(jiān)聽函數(shù)。
3.除了DOM節(jié)點(diǎn),其他對(duì)象(比如:window,XMLHttpRequest等)也有這個(gè)接口,它等于是整個(gè)javascript統(tǒng)一的監(jiān)聽函數(shù)接口。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109219.html

相關(guān)文章

  • 瀏覽器下的 Event Loop

    摘要:前言是以單線程的形式運(yùn)行在宿主環(huán)境下,采用了回調(diào)的形式來解決異步任務(wù)。線程中步就是在瀏覽器下的。 前言 javascript 是以單線程的形式運(yùn)行在宿主環(huán)境下,javascript 采用了回調(diào)的形式來解決異步任務(wù)。 為什么是單線程? javascript 的最開始的出現(xiàn)是為了給 web 頁面增添一些動(dòng)態(tài)的效果,那么就避免不了獲取頁面上的元素信息,如果 javascript 是以多線程的...

    forrest23 評(píng)論0 收藏0
  • 什么是JavaScript 事件循環(huán) ?

    摘要:此事件隊(duì)列的美妙之處在于它只是函數(shù)等待被調(diào)用和移動(dòng)到調(diào)用棧的一個(gè)臨時(shí)存放區(qū)域。在事件循環(huán)不斷監(jiān)視調(diào)用棧是否為空現(xiàn)在確實(shí)是空的時(shí)候調(diào)用創(chuàng)建一個(gè)新的調(diào)用棧來執(zhí)行代碼。在執(zhí)行完之后進(jìn)入了一個(gè)新的狀態(tài)這個(gè)狀態(tài)調(diào)用棧為空事件記錄表為空事件隊(duì)列也為空。 這篇文章是對(duì)個(gè)人認(rèn)為講解 JavaScript 事件循環(huán)比較清楚的一篇英文文章的簡單翻譯,原文地址是http://altitudelabs.com...

    tracymac7 評(píng)論0 收藏0
  • JavaScript 瀏覽器事件解析

    摘要:原文瀏覽器事件之間的關(guān)系程序采用了異步事件驅(qū)動(dòng)編程模型,維基百科對(duì)它的解釋是事件驅(qū)動(dòng)程序設(shè)計(jì)英語是一種電腦程序設(shè)計(jì)模型。 原文:https://keelii.github.io/2016/09/29/javascript-browser-event/ JavaScript、瀏覽器、事件之間的關(guān)系 JavaScript 程序采用了異步事件驅(qū)動(dòng)編程(Event-driven program...

    spacewander 評(píng)論0 收藏0
  • JavaScript高級(jí)程序設(shè)計(jì)》學(xué)習(xí)筆記:JavaScript中的事件流和事件處理程序

    摘要:可以使用偵聽器或處理程序來預(yù)訂事件,以便事件發(fā)生時(shí)執(zhí)行相應(yīng)的代碼。響應(yīng)某個(gè)事件的函數(shù)稱為事件處理程序或事件偵聽器??梢詣h除通過級(jí)方法指定的事件處理程序。 JavaScript和HTML之間的交互是通過事件實(shí)現(xiàn)的。 事件:文檔或?yàn)g覽器窗口中發(fā)生的一些特定的交互瞬間。 可以使用偵聽器(或處理程序來預(yù)訂事件),以便事件發(fā)生時(shí)執(zhí)行相應(yīng)的代碼。 1. 事件流 事件流:從頁面中接收事件的順序。 ...

    Rocko 評(píng)論0 收藏0
  • 【譯】JavaScript面試問題:事件委托和this

    摘要:主題來自于的典型面試問題列表。有多種方法來處理事件委托。這種方法的缺點(diǎn)是父容器的偵聽器可能需要檢查事件來選擇正確的操作,而元素本身不會(huì)是一個(gè)監(jiān)聽器。 showImg(http://fw008950-flywheel.netdna-ssl.com/wp-content/uploads/2014/11/Get-Hired-Fast-How-to-Job-Search-Classifieds...

    浠ラ箍 評(píng)論0 收藏0
  • 初窺JavaScript事件機(jī)制的實(shí)現(xiàn)(一)—— Node.js事件驅(qū)動(dòng)實(shí)現(xiàn)概覽

    摘要:如果當(dāng)前沒有事件也沒有定時(shí)器事件,則返回。相關(guān)資料關(guān)于的架構(gòu)及設(shè)計(jì)思路的事件討論了使用線程池異步運(yùn)行代碼。下一篇初窺事件機(jī)制的實(shí)現(xiàn)二中定時(shí)器的實(shí)現(xiàn) 在瀏覽器中,事件作為一個(gè)極為重要的機(jī)制,給予JavaScript響應(yīng)用戶操作與DOM變化的能力;在Node.js中,事件驅(qū)動(dòng)模型則是其高并發(fā)能力的基礎(chǔ)。 學(xué)習(xí)JavaScript也需要了解它的運(yùn)行平臺(tái),為了更好的理解JavaScript的事...

    lavor 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<