js中事件綁定addEventListener()和attachEvent()的區(qū)別
JavaScript-DOM-事件綁定
當(dāng)我們?yōu)樵亟壎ㄒ粋€(gè)單擊事件時(shí),通常會(huì)想到element.οnclick=function(){},但是要綁定多個(gè)單擊函數(shù)時(shí)卻會(huì)失效,并且會(huì)被最新的響應(yīng)函數(shù)覆蓋。所以就有了addEventListener()方法,但是IE8及以下不支持。
addEventListener()
該方法可以同時(shí)為一個(gè)元素的相同事件同時(shí)綁定多個(gè)響應(yīng)函數(shù),這樣當(dāng)事件觸發(fā)時(shí),響應(yīng)函數(shù)將會(huì)按照函數(shù)的綁定順序執(zhí)行。有三個(gè)參數(shù)表示內(nèi)容如下:
- 事件的字符串,不要on如:click而不是onclick。
- 回調(diào)函數(shù),當(dāng)事件觸發(fā)時(shí)該函數(shù)被調(diào)用。
- 是否在捕獲階段觸發(fā)事件,需要一個(gè)布爾值,true表示在捕獲階段觸發(fā),false則相反。一般都為false。
attachEvent()
IE8及以下不支持addEventListener(),可以通過attachEvent()為一個(gè)元素的相同事件同時(shí)綁定多個(gè)響應(yīng)函數(shù)。但是事件觸發(fā)時(shí),響應(yīng)函數(shù)將會(huì)后綁定先執(zhí)行,與addEventListener()相反,用法相似,有兩個(gè)參數(shù):
- 事件的字符串,要on 如:onclick而不是click
- 回調(diào)函數(shù),當(dāng)事件觸發(fā)時(shí)該函數(shù)被調(diào)用
注意
需要注意的是addEventListener()中的this是綁定事件的對(duì)象,attachEvent()中的this是window對(duì)象,this是誰(shuí)是由調(diào)用方式?jīng)Q定的。call()、apply()、bind()都可以用來重定義this對(duì)象對(duì)于三種方法可以參考這篇講解:JavaScript 中 call()、apply()、bind() 的用法。那對(duì)于瀏覽器調(diào)用的this我們不可修改,可以在匿名函數(shù)中調(diào)用回調(diào)函數(shù),拿回修改權(quán)力。迂回修改!
示例
通過為按鈕單擊事件綁定多個(gè)響應(yīng)函數(shù)的例子來試一試以上方法。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>DOM-事件綁定示例</title> <script> window.onload = function () { let btn = document.getElementsByTagName('button')[0]; /* * 綁定函數(shù) * 參數(shù): * obj: 要綁定事件的對(duì)象 * enentStr:事件的字符串(不要on) * callback:回調(diào)函數(shù) */ function bind(obj, enentStr, callback) { // 兼容判斷 if (obj.addEventListener) { // 大部分瀏覽器兼容 obj.addEventListener(enentStr, callback, false); } else { // IE8以下,事件名需要on obj.attachEvent('on' + enentStr, function () { // 瀏覽器調(diào)用不可修改,在匿名函數(shù)中調(diào)用回調(diào)函數(shù),拿回修改權(quán)力 callback.call(obj); }); } } // 調(diào)用綁定函數(shù) bind(btn, 'click', function () { alert(this); }) bind(btn, 'click', function () { alert('hello 啊'); }) } </script> </head> <body> <button>點(diǎn)我</button> </body> </html>
到此這篇關(guān)于js中事件綁定addEventListener()和attachEvent()的區(qū)別的文章就介紹到這了,更多相關(guān)addEventListener()和attachEvent()區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
不使用ajax實(shí)現(xiàn)無(wú)刷新提交表單
這篇文章主要介紹了不使用ajax實(shí)現(xiàn)無(wú)刷新提交表單的方法,需要的朋友可以參考下2014-12-12Bootstrap入門教程一Hello Bootstrap初識(shí)
Bootstrap,來自 Twitter,是目前很受歡迎的前端框架。Bootstrap是基于 HTML5、CSS3和Javascriopt開發(fā)的。這篇文章主要介紹了基于Bootstrap3實(shí)現(xiàn)漂亮簡(jiǎn)潔的CSS3價(jià)格表(精美代碼版),需要的朋友可以參考下2017-03-03JavaScript實(shí)現(xiàn)數(shù)組降維詳解
大家都知道將多維數(shù)組(尤其是二維數(shù)組)轉(zhuǎn)化為一維數(shù)組是業(yè)務(wù)開發(fā)中的常用邏輯,除了使用樸素的循環(huán)轉(zhuǎn)換以外,我們還可以利用Javascript的語(yǔ)言特性和數(shù)據(jù)結(jié)構(gòu)的思想實(shí)現(xiàn)更為簡(jiǎn)潔優(yōu)雅的轉(zhuǎn)換。下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)關(guān)于JavaScript如何實(shí)現(xiàn)數(shù)組降維吧。2017-01-01javascript面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)踐常用知識(shí)點(diǎn)總結(jié)
這篇文章主要介紹了javascript面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)踐常用知識(shí)點(diǎn),結(jié)合實(shí)例形式總結(jié)分析了javascript面向?qū)ο蟪绦蛟O(shè)計(jì)中原型引用類型、屬性、方法相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-07-07javascript跟隨滾動(dòng)效果插件代碼(javascript Follow Plugin)
這篇文章介紹了javascript跟隨滾動(dòng)效果插件代碼(javascript Follow Plugin),有需要的朋友可以參考一下2013-08-08uni-app登錄與支付功能實(shí)現(xiàn)三秒后自動(dòng)跳轉(zhuǎn)
這篇文章主要介紹了uni-app:登錄與支付-- 三秒后自動(dòng)跳轉(zhuǎn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03原生JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)版計(jì)算器
這篇文章主要為大家詳細(xì)介紹了原生JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)版計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11