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是綁定事件的對象,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)力。迂回修改!
示例
通過為按鈕單擊事件綁定多個(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: 要綁定事件的對象
* 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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Bootstrap入門教程一Hello Bootstrap初識(shí)
Bootstrap,來自 Twitter,是目前很受歡迎的前端框架。Bootstrap是基于 HTML5、CSS3和Javascriopt開發(fā)的。這篇文章主要介紹了基于Bootstrap3實(shí)現(xiàn)漂亮簡潔的CSS3價(jià)格表(精美代碼版),需要的朋友可以參考下2017-03-03
JavaScript實(shí)現(xiàn)數(shù)組降維詳解
大家都知道將多維數(shù)組(尤其是二維數(shù)組)轉(zhuǎn)化為一維數(shù)組是業(yè)務(wù)開發(fā)中的常用邏輯,除了使用樸素的循環(huán)轉(zhuǎn)換以外,我們還可以利用Javascript的語言特性和數(shù)據(jù)結(jié)構(gòu)的思想實(shí)現(xiàn)更為簡潔優(yōu)雅的轉(zhuǎn)換。下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)關(guān)于JavaScript如何實(shí)現(xiàn)數(shù)組降維吧。2017-01-01
javascript面向?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-07
javascript跟隨滾動(dòng)效果插件代碼(javascript Follow Plugin)
這篇文章介紹了javascript跟隨滾動(dòng)效果插件代碼(javascript Follow Plugin),有需要的朋友可以參考一下2013-08-08
uni-app登錄與支付功能實(shí)現(xiàn)三秒后自動(dòng)跳轉(zhuǎn)
這篇文章主要介紹了uni-app:登錄與支付-- 三秒后自動(dòng)跳轉(zhuǎn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
原生JavaScript實(shí)現(xiàn)網(wǎng)頁版計(jì)算器
這篇文章主要為大家詳細(xì)介紹了原生JavaScript實(shí)現(xiàn)網(wǎng)頁版計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11

