js中事件綁定addEventListener()和attachEvent()的區(qū)別
JavaScript-DOM-事件綁定
當我們?yōu)樵亟壎ㄒ粋€單擊事件時,通常會想到element.οnclick=function(){},但是要綁定多個單擊函數(shù)時卻會失效,并且會被最新的響應(yīng)函數(shù)覆蓋。所以就有了addEventListener()方法,但是IE8及以下不支持。
addEventListener()
該方法可以同時為一個元素的相同事件同時綁定多個響應(yīng)函數(shù),這樣當事件觸發(fā)時,響應(yīng)函數(shù)將會按照函數(shù)的綁定順序執(zhí)行。有三個參數(shù)表示內(nèi)容如下:
- 事件的字符串,不要on如:click而不是onclick。
- 回調(diào)函數(shù),當事件觸發(fā)時該函數(shù)被調(diào)用。
- 是否在捕獲階段觸發(fā)事件,需要一個布爾值,true表示在捕獲階段觸發(fā),false則相反。一般都為false。
attachEvent()
IE8及以下不支持addEventListener(),可以通過attachEvent()為一個元素的相同事件同時綁定多個響應(yīng)函數(shù)。但是事件觸發(fā)時,響應(yīng)函數(shù)將會后綁定先執(zhí)行,與addEventListener()相反,用法相似,有兩個參數(shù):
- 事件的字符串,要on 如:onclick而不是click
- 回調(diào)函數(shù),當事件觸發(fā)時該函數(shù)被調(diào)用
注意
需要注意的是addEventListener()中的this是綁定事件的對象,attachEvent()中的this是window對象,this是誰是由調(diào)用方式?jīng)Q定的。call()、apply()、bind()都可以用來重定義this對象對于三種方法可以參考這篇講解:JavaScript 中 call()、apply()、bind() 的用法。那對于瀏覽器調(diào)用的this我們不可修改,可以在匿名函數(shù)中調(diào)用回調(diào)函數(shù),拿回修改權(quán)力。迂回修改!
示例
通過為按鈕單擊事件綁定多個響應(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: 要綁定事件的對象 * 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>點我</button> </body> </html>
到此這篇關(guān)于js中事件綁定addEventListener()和attachEvent()的區(qū)別的文章就介紹到這了,更多相關(guān)addEventListener()和attachEvent()區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Bootstrap入門教程一Hello Bootstrap初識
Bootstrap,來自 Twitter,是目前很受歡迎的前端框架。Bootstrap是基于 HTML5、CSS3和Javascriopt開發(fā)的。這篇文章主要介紹了基于Bootstrap3實現(xiàn)漂亮簡潔的CSS3價格表(精美代碼版),需要的朋友可以參考下2017-03-03javascript面向?qū)ο蟪绦蛟O(shè)計實踐常用知識點總結(jié)
這篇文章主要介紹了javascript面向?qū)ο蟪绦蛟O(shè)計實踐常用知識點,結(jié)合實例形式總結(jié)分析了javascript面向?qū)ο蟪绦蛟O(shè)計中原型引用類型、屬性、方法相關(guān)操作技巧與注意事項,需要的朋友可以參考下2019-07-07javascript跟隨滾動效果插件代碼(javascript Follow Plugin)
這篇文章介紹了javascript跟隨滾動效果插件代碼(javascript Follow Plugin),有需要的朋友可以參考一下2013-08-08uni-app登錄與支付功能實現(xiàn)三秒后自動跳轉(zhuǎn)
這篇文章主要介紹了uni-app:登錄與支付-- 三秒后自動跳轉(zhuǎn),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03原生JavaScript實現(xiàn)網(wǎng)頁版計算器
這篇文章主要為大家詳細介紹了原生JavaScript實現(xiàn)網(wǎng)頁版計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11