亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

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

2024-05-06 16:45:24
字體:
來源:轉載
供稿:網友

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

JavaScript和HTML之間的交互是通過事件實現的。

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

事件流:

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

1) 事件冒泡

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

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

2) 事件捕獲

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

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

DOM事件流:

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

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

事件處理程序:

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

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

1) HTML事件處理程序

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

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

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

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

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

2) DOM0級事件處理程序

通過JavaScript指定事件處理程序的傳統方式,將一個函數賦值給一個事件處理程序屬性。使用DOM0級方法指定的事件處理程序被認為是元素的方法,因此this引用當前元素。

DOM0級事件處理程序的優勢:

① 簡單;

② 跨瀏覽器

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

3) DOM2級事件處理程序

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

DOM2級事件處理程序的優勢:

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

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

4) IE事件處理程序

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

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

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

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

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

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

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

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

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

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

① 先檢測傳入的元素是否存在DOM2級方法(傳入的第三個參數為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;  }}

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


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91干在线观看| www.国产一区| 中文字幕一区日韩电影| 2021国产精品视频| 欧美成人精品在线观看| 成人国产精品色哟哟| 欧美精品精品精品精品免费| 91爱视频在线| 91色p视频在线| 日本欧美一二三区| 久久久精品国产亚洲| 日韩在线视频播放| 亚洲欧美中文另类| 91九色在线视频| 国产日韩欧美在线播放| 亚洲成年人在线播放| 国产精品永久免费观看| 日本高清视频精品| 日韩精品极品毛片系列视频| 国产在线98福利播放视频| 亚洲精品中文字| 日韩中文字幕国产精品| 色噜噜狠狠狠综合曰曰曰| 久久久久久久久久久av| 国产精品对白刺激| 欧美成人四级hd版| 久久精品视频免费播放| 成人综合网网址| 91精品国产成人| 亚洲国产精品小视频| 免费91麻豆精品国产自产在线观看| 亚洲国产精品成人va在线观看| 成人中文字幕在线观看| 精品久久久久久久中文字幕| 亚洲色图18p| 国产91在线播放| 国产69久久精品成人| 日韩高清电影免费观看完整版| 一区二区三区国产在线观看| 久久99国产综合精品女同| 亚洲国产精品推荐| 国产成人avxxxxx在线看| 国产亚洲欧洲高清一区| 欧美日韩亚洲一区二区三区| 久久激情视频久久| 成人性生交大片免费看视频直播| 中文字幕日韩免费视频| 成人免费黄色网| 国产成人jvid在线播放| 欧美一级片在线播放| 国产午夜精品全部视频播放| 一本色道久久综合狠狠躁篇的优点| 在线观看欧美日韩国产| 91精品国产九九九久久久亚洲| 插插插亚洲综合网| 97在线视频一区| 久久久免费观看视频| 国产精品夜色7777狼人| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲影院在线看| 日韩精品在线观看一区二区| 国产在线拍偷自揄拍精品| 成人妇女免费播放久久久| 欧美另类老肥妇| 国产精品爽黄69天堂a| 国产精品美女www| 国产日韩中文在线| 全球成人中文在线| 国产成人avxxxxx在线看| 91在线免费网站| 国产精品白嫩初高中害羞小美女| 亚洲91av视频| 国产一区二区三区日韩欧美| 亚洲人成电影网站色| 亚洲第一精品夜夜躁人人躁| 欧美视频在线观看免费| 黑人巨大精品欧美一区免费视频| 久久手机免费视频| 精品国产一区二区三区久久狼黑人| 69久久夜色精品国产69| 伊人av综合网| 亚洲性无码av在线| 亚洲欧美日韩综合| 色综合色综合久久综合频道88| 久久69精品久久久久久国产越南| 成人有码在线播放| 国产精品久久一区主播| 欧美日韩综合视频| 97免费中文视频在线观看| 欧美中文在线字幕| 欧美超级乱淫片喷水| 欧美日韩国产一区中文午夜| 一区二区福利视频| 国产999精品久久久| 欧美性猛交xxxx乱大交极品| 国产成人久久久精品一区| 国产99视频在线观看| 国产极品精品在线观看| 国产亚洲精品91在线| 亚洲国产精品系列| 国产精品老牛影院在线观看| 91国语精品自产拍在线观看性色| 欧美另类在线播放| 欧美老肥婆性猛交视频| 国产一区二区三区在线观看网站| 精品国产一区二区三区久久久狼| 欧美视频在线观看 亚洲欧| 91久久精品国产91性色| 亚洲一区亚洲二区| 日韩免费视频在线观看| 国产精品美女久久久久av超清| 久久99热精品| 久久久精品一区二区| 国产精品中文字幕在线| xxxx欧美18另类的高清| 久久久久久久激情视频| 69久久夜色精品国产69乱青草| 国产一区二区三区网站| 久久91亚洲精品中文字幕| 懂色aⅴ精品一区二区三区蜜月| 91免费看片在线| 日韩精品视频中文在线观看| 精品久久久精品| 日韩精品中文在线观看| 欧美有码在线观看| 国产精品尤物福利片在线观看| 久久综合色影院| 91九色国产视频| 亚洲成年人在线| 欧美日韩在线一区| 国产精品久久久久久久天堂| 国产精品亚洲第一区| 中文字幕亚洲色图| 九九热视频这里只有精品| 精品久久久国产精品999| 日韩电影中文字幕| 久久夜色精品亚洲噜噜国产mv| 欧洲精品久久久| 国产精品女人久久久久久| 在线色欧美三级视频| 国产精品成人观看视频国产奇米| 国产欧美日韩中文字幕在线| 日本三级韩国三级久久| 精品欧美国产一区二区三区| 美女福利视频一区| 欧美在线视频在线播放完整版免费观看| 欧美亚洲日本黄色| 成人精品久久一区二区三区| 欧美性猛交丰臀xxxxx网站| 中文字幕国产亚洲| 亚洲欧美中文在线视频| 亚洲男人的天堂网站| 日韩在线观看网址| 欧美激情一区二区久久久| 亚洲精品电影网在线观看| 第一福利永久视频精品| 国产综合色香蕉精品| 欧美激情中文字幕在线| 国产精品免费在线免费| 国产国语刺激对白av不卡| 欧美插天视频在线播放| 国产婷婷97碰碰久久人人蜜臀| 色综合久久中文字幕综合网小说| 欧美成人在线网站|