亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript中為事件指定處理程序的五種方式分析

 更新時間:2018年07月27日 09:55:07   作者:筱葭  
這篇文章主要介紹了JavaScript中為事件指定處理程序的五種方式,結(jié)合實例形式簡單分析了JavaScript事件處理的相關(guān)原理與事件指定處理程序的五種常用方式,需要的朋友可以參考下

本文實例講述了JavaScript中為事件指定處理程序的五種方式。分享給大家供大家參考,具體如下:

JavaScript和HTML之間的交互是通過事件實現(xiàn)的。

IE9、Firefox、Opera、Sarifi、Chrome都已經(jīng)實現(xiàn)了DOM2級事件模塊的核心部分,IE8是最后一個仍然使用其專有事件系統(tǒng)的主要瀏覽器。

事件流:

事件流描述的是從頁面中接受事件的順序,但IE和Netscape卻提出了完全相反的事件流的概念,IE的事件流是事件冒泡流,而Netscape的事件流是事件捕獲流。

1) 事件冒泡

事件開始時由最具體的元素(文檔中嵌套層次最深的那個節(jié)點接收,然后逐級向上傳播到較為不具體的節(jié)點(文檔)。

不支持事件冒泡的事件:blur、focusload、unload。

2) 事件捕獲

不太具體的節(jié)點應該更早接收到事件,而最具體的節(jié)點應該最后接收到事件。事件捕獲的用意在于事件到達預定目標之前捕獲它。

雖然IE9、Safari、Chrome、Firefox、Opera都支持事件捕獲和事件冒泡,但IE8及其更早版本只支持事件冒泡,不支持事件捕獲,因此。建議使用事件冒泡,在有特殊需要的時候再使用事件捕獲。

DOM事件流:

DOM2級事件規(guī)定的事件流包括三個階段:事件捕獲階段,處于目標階段和事件冒泡階段。實際上,在事件捕獲階段預定目標不會接收到事件,處于目標階段事件在預定目標上發(fā)生。事件處理中,處于目標階段被看成事件冒泡階段的一部分。但是,即使“DOM2級事件”規(guī)范明確要求捕獲階段不會涉及事件目標,但IE9、 Safari、Chrome、Firefox和Opera9.5及更高版本都會在捕獲階段觸發(fā)事件對象上的事件,結(jié)果是有兩個機會在目標對象上操作事 件。

IE9、Firefox、Opera、Sarifi、Chrome都支持DOM事件流,IE8及其更早版本不支持DOM事件流。

事件處理程序:

事件就是用戶或瀏覽器自身執(zhí)行的某種動作,而響應某個事件的函數(shù)就是事件處理程序(或事件偵聽器),事件處理程序的名字以“on”開頭。

JavaScript中有五種事件處理程序方式:

1) HTML事件處理程序

每種事件都可以使用一個與相應事件處理程序同名的HTML特性來指定,特性的值可以是能夠執(zhí)行的JavaScript代碼,也可以是函數(shù)。函數(shù)中有一個局部變量event,通過event變量可以訪問事件對象;在函數(shù)內(nèi)部,this值等于事件的目標元素。

在HTML中指定事件處理程序的幾個缺點:

① 時差問題:用戶可能在HTML元素一出現(xiàn)在頁面上就觸發(fā)相應的事件,但當時的事件處理程序有可能尚不具備執(zhí)行條件,如用戶在解析事件處理函數(shù)之前就觸發(fā)事件。為此,很多HTML事件處理程序都會封裝在一個try-catch塊中,以便及時捕獲錯誤,以免錯誤拋出被用戶看到。

② 擴展事件處理程序的作用域鏈在不同瀏覽器中會導致不同的結(jié)果。不同JavaScript引擎遵循的標識符解析規(guī)則略有差異,很有可能會在訪問非限定對象成員時出錯。

③ HTML代碼與JavaScript代碼緊密耦合,更換事件處理程序需要改動HTML代碼與JavaScript代碼。

2) DOM0級事件處理程序

通過JavaScript指定事件處理程序的傳統(tǒng)方式,將一個函數(shù)賦值給一個事件處理程序?qū)傩?。使用DOM0級方法指定的事件處理程序被認為是元素的方法,因此this引用當前元素。

DOM0級事件處理程序的優(yōu)勢:

① 簡單;

② 跨瀏覽器

可以通過將事件處理程序的值設置為null來刪除通過DOM0級方法指定的事件處理程序。

3) DOM2級事件處理程序

DOM2級事件定義了兩種方法,用于指定和刪除事件處理程序的操作:addEventListener()removeEventListener(),它們都接收3個參數(shù):要處理的事件名、作為事件處理程序的函數(shù)和一個布爾值(true表示在捕獲階段調(diào)用事件處理程序,false表示在冒泡階段調(diào)用事件處理程序)。

DOM2級事件處理程序的優(yōu)勢:

可以添加多個事件處理程序,它們會按照添加它們的順序觸發(fā)。

通過addEventListener()添加的事件處理程序只能用removeEventListener()來移除,但要求移除時傳入的參數(shù)與添加事件處理程序時使用的參數(shù)相同,因此通過addEventListener()添加的匿名函數(shù)將無法移除,需要給removeEventListener()傳入addEventListener()中命名的函數(shù)才能正常移除。

4) IE事件處理程序

IE事件定義了兩個方法:attachEvent()detachEvent(),它們都接收2個參數(shù):要處理的事件名、作為事件處理程序的函數(shù).由于IE8及其更早版本只支持事件冒泡,所以通過attachEvent()添加的事件處理程序都會被添加到冒泡階段。

注意:通過IE的attachEvent()添加的事件處理程序的名字以“on”開頭,而通過DOM的addEventListener()添加的名字不是。

在IE中使用attachEvent()與使用DOM0級方法的主要區(qū)別:

事件處理程序的作用域不同。在IE中使用attachEvent(),事件處理程序會在全局作用域中運行,因此this等于window;而使用DOM0級方法,事件處理程序會在其所屬元素的作用域中運行。

在IE中使用attachEvent()與使用DOM2級方法的區(qū)別:

添加多個事件處理程序的執(zhí)行順序不同。在IE中使用attachEvent(),可以添加多個事件處理程序,它們會按照添加它們的相反順序觸發(fā);在DOM中使用addEventListener(),可以添加多個事件處理程序,但它們會按照添加它們的順序觸發(fā)。

通過attachEvent()添加的事件處理程序只能用detachEvent()來移除,但要求移除時傳入的參數(shù)與添加事件處理程序時使用的參數(shù)相同,因此通過attachEvent()添加的匿名函數(shù)將無法移除,需要給detachEvent()傳入attachEvent()中命名的函數(shù)才能正常移除。

5) 跨瀏覽器的事件處理程序

要保證事件處理程序的代碼在大多數(shù)瀏覽器下一致地運行,只需關(guān)注冒泡階段。

視情況分別使用DOM2級方法、IE方法、DOM0級方法來添加和移除事件,addHandler()removeHandler()方法屬于EventUtil對象。

① 先檢測傳入的元素是否存在DOM2級方法(傳入的第三個參數(shù)為false以表示冒泡階段);

② 再檢測傳入的元素是否存在IE的方法;

③ 最后檢測傳入的元素是否存在DOM0級方法(使用方括號語法將屬性名指定為事件處理程序)。

var EventUtil = {
  addHandler:function(element, type, handler) {
    if (element.addEventListener)
      element.addEventListener(type, handler, false);
    else if (element.attachEvent)
      element.attachEvent("on" + type, handler);
    else
      element["on" + type] = handler;
  },
  removeHandler:function(element, type, handler) {
    if (element.removeEventListener)
      element.removeEventListener(type, handler, false);
    else if (element.detachEvent)
      element.detachEvent(“on” + type, handler);
    else
      element["on" + type] = null;
  }
}

PS:關(guān)于javascript事件說明可參考本站javascript事件與功能說明大全http://tools.jb51.net/table/javascript_event

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript事件相關(guān)操作與技巧大全》、《JavaScript頁面元素操作技巧總結(jié)》、《JavaScript操作DOM技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript錯誤與調(diào)試技巧總結(jié)

希望本文所述對大家JavaScript程序設計有所幫助。

相關(guān)文章

  • TS如何從目錄中提取所有指定擴展名的文件

    TS如何從目錄中提取所有指定擴展名的文件

    .ts是一種高清視頻封裝格式文件,全稱為MPEG2-TS,TS表示TransportStream,這篇文章主要介紹了TS如何從目錄中提取所有指定擴展名的文件,需要的朋友可以參考下
    2023-05-05
  • iconfont的三種使用方式詳解

    iconfont的三種使用方式詳解

    這篇文章主要介紹了iconfont的三種使用方式,需要的朋友可以參考下
    2018-08-08
  • JavaScript獲取IP獲取的是IPV6 如何校驗

    JavaScript獲取IP獲取的是IPV6 如何校驗

    項目中遇到了關(guān)于IPV6的一些問題,特意做一個專輯說明一下,希望能夠幫助有需要的同學!
    2016-06-06
  • 前端常見的兩種pc適配方案介紹

    前端常見的兩種pc適配方案介紹

    這篇文章主要介紹了前端常見的兩種pc適配方案的相關(guān)資料,在PC端自適應設計通過優(yōu)化用戶體驗和提高網(wǎng)站適配性,確保了電商網(wǎng)站、企業(yè)官網(wǎng)和在線教育平臺等多種場景下內(nèi)容的清晰展示和流暢操作,需要的朋友可以參考下
    2024-10-10
  • 不到200行 JavaScript 代碼實現(xiàn)富文本編輯器的方法

    不到200行 JavaScript 代碼實現(xiàn)富文本編輯器的方法

    這篇文章主要介紹了不到200行 JavaScript 代碼實現(xiàn)富文本編輯器的方法,需要的朋友可以參考下
    2018-01-01
  • JS獲取數(shù)組最大值、最小值及長度的方法

    JS獲取數(shù)組最大值、最小值及長度的方法

    這篇文章主要介紹了JS獲取數(shù)組最大值、最小值及長度的方法,涉及JavaScript遍歷數(shù)組及l(fā)ength屬性的相關(guān)使用技巧,非常簡潔實用,需要的朋友可以參考下
    2015-11-11
  • js左右彈性滾動對聯(lián)廣告代碼分享

    js左右彈性滾動對聯(lián)廣告代碼分享

    這個對聯(lián)廣告與其它的有所區(qū)別,這個是頁面加載時先沒看到廣告,然后從左邊快速飛進來的兩個對聯(lián)廣告哦,下面我們一起來看看對聯(lián)廣告效果代碼
    2014-02-02
  • JavaScript數(shù)組前面插入元素的方法

    JavaScript數(shù)組前面插入元素的方法

    這篇文章主要介紹了JavaScript數(shù)組前面插入元素的方法,涉及javascript中unshift方法的使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • js 窗口抖動示例

    js 窗口抖動示例

    想必大家對窗口抖動一詞并不陌生吧,其實原理很簡單,下面為大家簡單介紹下js中時如何實現(xiàn)的,喜歡的朋友可以參考下
    2013-09-09
  • 詳解JS數(shù)組方法

    詳解JS數(shù)組方法

    這篇文章主要為大家介紹了JS的數(shù)組方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11

最新評論