JS addEventListener()和attachEvent()方法實(shí)現(xiàn)注冊(cè)事件
在 JavaScript 的 DOM 事件模型中,通過調(diào)用對(duì)象的 addEventListener() 方法注冊(cè)事件。用法如下:
element.addEventListener(String type, Function listener, boolean useCaptrue);
參數(shù)說明如下:
- type:注冊(cè)事件的類型名。事件類型與事件屬性不同,事件類型名沒有 on 前綴。例如,對(duì)于事件屬性 onclick 來說,所對(duì)應(yīng)的事件類型為 click。
- listener:監(jiān)聽函數(shù),即事件處理函數(shù)。在指定類型的事件發(fā)生時(shí)將調(diào)用該函數(shù)。在調(diào)用這個(gè)函數(shù)時(shí),默認(rèn)傳遞給它的唯一參數(shù)是 event 對(duì)象。
- useCaptrue:是一個(gè)布爾值。如果為 true,則指定的事件處理函數(shù)將在事件傳播的捕獲階段觸發(fā);如果為 false,則事件處理函數(shù)將在冒泡階段觸發(fā)。
示例1
下面示例使用 addEventListener() 為所有按鈕注冊(cè) click 事件。首先,調(diào)用 document 的 getElementsByTagName() 方法捕獲所有按鈕對(duì)象;然后,使用 for 語句遍歷按鈕集(btn),并使用 addEventListener() 方法分別為每一個(gè)按鈕注冊(cè)事件函數(shù),獲取當(dāng)前對(duì)象所顯示的文本。
<button id="btn1" onclick="btn1();">按 鈕 1</button> <button id="btn2" onclick="btn2(event);">按 鈕 2</button> <script> var btn = document.getElementsByTagName("button"); //捕獲所有按鈕 for(var i in btn){ //遍歷按鈕集合 btn[i].addEventListener("click", function(){ alert(this.innerHTML); }, true); //為每個(gè)按鈕對(duì)象注冊(cè)一個(gè)事件處理函數(shù),定義在捕獲階段進(jìn)行響應(yīng) } </script>
在瀏覽器中預(yù)覽,單擊不同的按鈕,則瀏覽器會(huì)自動(dòng)顯示按鈕的名稱。效果如圖所示:
使用 addEventListener() 方法能夠?yàn)槎鄠€(gè)對(duì)象注冊(cè)相同的事件處理函數(shù),也可以為同一個(gè)對(duì)象注冊(cè)多個(gè)事件處理函數(shù)。為同一個(gè)對(duì)象注冊(cè)多個(gè)事件處理函數(shù)對(duì)于模塊化開發(fā)非常有用。
示例2
在下面示例中,為段落文本注冊(cè)兩個(gè)事件:mouseover 和 mouseout。當(dāng)光標(biāo)移到段落文本上面時(shí)會(huì)顯示為藍(lán)色背景,而當(dāng)光標(biāo)移出段落文本時(shí)會(huì)自動(dòng)顯示為紅色背景。這樣就不需要破壞文檔結(jié)構(gòu)為段落文本增加多個(gè)事件屬性。
<p id="p1">為對(duì)象注冊(cè)多個(gè)事件</p> <script> var p1 = document.getElementById("p1"); //捕獲段落元素的句柄 p1.addEventListener("mouseover", function () { this.style.background = 'blue'; }, true); //為段落元素注冊(cè)第1個(gè)事件處理函數(shù) p1.addEventListener("mouseout", function () { this.style.background = 'blue'; }, true); //為段落元素注冊(cè)第2個(gè)事件處理函數(shù) </script>
IE 事件模型使用 attachEvent() 方法注冊(cè)事件。用法如下:
element.attachEvent(etype, eventName)
參數(shù)列表如下:
- etype:設(shè)置事件類型,如 onclick、onkeyup、onmousemove 等。
- eventName:設(shè)置時(shí)間名稱,也就是事件處理函數(shù)。
示例3
在下面示例中,為段落標(biāo)簽 <p> 注冊(cè)兩個(gè)事件:mouseover 和 mouseout,設(shè)計(jì)當(dāng)光標(biāo)經(jīng)過時(shí),段落文本背景色顯示為藍(lán)色,當(dāng)光標(biāo)移開之后,背景色顯示為紅色。
<p id="p1">為對(duì)象注冊(cè)多個(gè)事件</p> <script> var p1 = document.getElementById("p1"); //捕獲段落元素 p1.attachEvent("onmouseover", function () { this.style.background = 'blue'; }); //注冊(cè)mouseover事件 p1.attachEvent("onmouseout", function () { this.style.background = 'red'; }); //注冊(cè)mouseout事件 </script>
使用 attachEvent() 注冊(cè)事件時(shí),其事件處理函數(shù)的調(diào)用對(duì)象不再是當(dāng)前事件對(duì)象本身,而是 window 對(duì)象,因此事件函數(shù)中的 this 就指向 window,而不是當(dāng)前對(duì)象,如果要獲取當(dāng)前對(duì)象,應(yīng)該使用 event 的 srcElement 屬性。
IE 事件模型中的 attachEvent() 方法第 1 個(gè)參數(shù)為事件類型名稱,需要加上 on 前綴,而使用 addEventListener() 方法時(shí),則不需要這個(gè) on 前綴,如 click。
到此這篇關(guān)于JS addEventListener()和attachEvent()方法實(shí)現(xiàn)注冊(cè)事件的文章就介紹到這了,更多相關(guān)JS addEventListener()和attachEvent()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序?qū)崿F(xiàn)時(shí)間進(jìn)度條功能
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)時(shí)間進(jìn)度條功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11javascript contains和compareDocumentPosition 方法來確定是否HTML節(jié)點(diǎn)間的關(guān)
一個(gè)很棒的 blog 文章,是 PPK 兩年前寫的,文章中解釋了 contains() 和 compareDocumentPosition() 方法運(yùn)行在他們各自的瀏覽器上。2010-02-02Bootstrap Table服務(wù)器分頁與在線編輯應(yīng)用總結(jié)
這篇文章主要介紹了Bootstrap Table服務(wù)器分頁與在線編輯應(yīng)用總結(jié) 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08原生js實(shí)現(xiàn)表格翻頁和跳轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了原生js實(shí)現(xiàn)表格翻頁和跳轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09js判斷選擇時(shí)間不能小于當(dāng)前時(shí)間的示例代碼
判斷選擇時(shí)間不能小于當(dāng)前時(shí)間的方法有很多,在本文為大家詳細(xì)介紹下使用js是如何實(shí)現(xiàn)的,感興趣的朋友可以嘗試操作下2013-09-09JavaScript實(shí)現(xiàn)三級(jí)級(jí)聯(lián)特效
這篇文章主要介紹了JavaScript實(shí)現(xiàn)三級(jí)級(jí)聯(lián)特效,選擇省會(huì)出現(xiàn)相應(yīng)的縣下拉框,同時(shí)市的下拉框改變,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11JavaScript獲取Excel表格的列序號(hào)和列名
這篇文章主要介紹了JavaScript獲取Excel表格的列序號(hào)和列名,在處理Excel文件時(shí),通常要獲取xx列的數(shù)據(jù),這就要求先找到列序號(hào),下文關(guān)于列名獲取需要的小伙伴可以參考一下2022-05-05JS控制圖片翻轉(zhuǎn)示例代碼(兼容firefox,ie,chrome)
本篇文章主要介紹了JS控制圖片翻轉(zhuǎn)示例代碼(兼容firefox,ie,chrome) 需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12