原生js事件的添加和刪除的封裝
在IE瀏覽器中添加或刪除事件用attachEvent、detachEvent。在其他標(biāo)準(zhǔn)瀏覽器中則用addEventListener、removeEventListener。下面的對(duì)事件的添加和刪除做了封裝。直接看代碼吧!
/**
* @description 事件綁定,兼容各瀏覽器
* @param target
* 事件觸發(fā)對(duì)象
* @param type
* 事件
* @param func
* 事件處理函數(shù)
*/
function bind(target, type, func) {
if (target.addEventListener) {// 非ie 和ie9
target.addEventListener(type, func, false);
} else if (target.attachEvent) { // ie6到ie8
target.attachEvent("on" + type, func);
} else {
target["on" + type] = func; // ie5
}
}
/**
* @description 事件移除,兼容各瀏覽器
* @param target
* 事件觸發(fā)對(duì)象
* @param type
* 事件
* @param func
* 事件處理函數(shù)
*/
function unbind(target, type, func) {
if (target.removeEventListener) {
target.removeEventListener(type, func, false);
} else if (target.detachEvent) {
target.detachEvent("on" + type, func);
} else {
target["on" + type] = null;
}
}
其他補(bǔ)充關(guān)于addEventListener第三個(gè)參數(shù)的含義
addEventListener的第三個(gè)參數(shù)
W3C DOM里用來(lái)新增觸發(fā)事件的函數(shù)叫AddEventListener,不過(guò)我一直不知道這個(gè)函數(shù)的第三個(gè)參數(shù)是要做什么用的,總是隨便設(shè),也沒(méi)發(fā)現(xiàn)差異再哪,前兩天看ppk on javascript終于看到說(shuō)明了,至于很久以前就有的DOM的標(biāo)準(zhǔn)文件,我其實(shí)根本沒(méi)去找過(guò)這個(gè)參數(shù)的資訊。
這個(gè)參數(shù)叫做useCapture,是一個(gè)boolean值,就是true or false,如果送出true的話就是瀏覽器會(huì)使用Capture方式,false的話是Bubbling,只有在特定狀況下才會(huì)有影響,通常建議是false,而會(huì)有影響的情形是目標(biāo)元素(target element)有祖先元素(ancestor element),而且也有同樣的事件對(duì)應(yīng)函數(shù),我想,看圖會(huì)比較清楚。

范例有兩層的div方塊
像這張圖所顯示的,我的范例有兩層div元素,而且都設(shè)定有click事件,一般來(lái)說(shuō),如果我在內(nèi)層藍(lán)色的元素上click不只會(huì)觸發(fā)藍(lán)色元素的click事件,還會(huì)同時(shí)觸發(fā)紅色元素的click事件,而useCapture這個(gè)參數(shù)就是在控制這時(shí)候兩個(gè)click事件的先后順序。如果是false,那就會(huì)使用bubbling,他是從內(nèi)而外的流程,所以會(huì)先執(zhí)行藍(lán)色元素的click事件再執(zhí)行紅色元素的click事件,如果是true,那就是capture,和bubbling相反是由外而內(nèi),會(huì)先執(zhí)行紅色元素的click事件才執(zhí)行藍(lán)色元素的click事件。附上兩個(gè)范例,capture和bubbling,兩個(gè)檔案只有差在此一參數(shù)不同,可以發(fā)現(xiàn)事件的發(fā)生順序不一樣了。
那如果不同層的元素使用的useCapture不同呢?就是會(huì)先從最外層元素往目標(biāo)元素尋找設(shè)定為capture的事件,到達(dá)目標(biāo)元素執(zhí)行目標(biāo)元素的事件后,再尋原路往外尋找設(shè)定為bubbling的事件。
相關(guān)文章
JS實(shí)現(xiàn)隨機(jī)點(diǎn)名器
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)隨機(jī)點(diǎn)名器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
JS實(shí)現(xiàn)星星評(píng)分功能實(shí)例代碼(兩種方法)
這篇文章主要介紹了JS實(shí)現(xiàn)星星評(píng)分功能實(shí)例代碼(兩種方法)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
JS與jQuery遍歷Table所有單元格內(nèi)容的方法
這篇文章主要介紹了JS與jQuery遍歷Table所有單元格內(nèi)容的方法,結(jié)合實(shí)例形式分別描述了JavaScript與jQuery實(shí)現(xiàn)遍歷table單元格的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-12-12
JavaScript制作windows經(jīng)典掃雷小游戲
掃雷是一款相當(dāng)大眾的小游戲,游戲目標(biāo)是在最短的時(shí)間內(nèi)根據(jù)點(diǎn)擊格子出現(xiàn)的數(shù)字找出所有非雷格子,同時(shí)避免踩雷。今天我們來(lái)看看如何使用javascript來(lái)實(shí)現(xiàn)這款小游戲2015-03-03
微信小程序如何調(diào)用json數(shù)據(jù)接口并解析
這篇文章主要介紹了微信小程序如何調(diào)用json數(shù)據(jù)接口并解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-06-06
JS判斷傳入函數(shù)的參數(shù)是否為空(函數(shù)參數(shù)是否傳遞)
這篇文章主要介紹了JS判斷傳入函數(shù)的參數(shù)是否為空(函數(shù)參數(shù)是否傳遞),需要的朋友可以參考下2023-05-05
JavaScript設(shè)計(jì)模式之單例模式原理與用法實(shí)例分析
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之單例模式原理與用法,結(jié)合實(shí)例形式分析了單例模式的原理、命名空間的使用、閉包、惰性單例形式以及單例模式的基本應(yīng)用,需要的朋友可以參考下2018-07-07
LayUI動(dòng)態(tài)設(shè)置checkbox不顯示的解決方法
今天小編就為大家分享一篇LayUI動(dòng)態(tài)設(shè)置checkbox不顯示的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
JavaScript中數(shù)組reduce()方法使用詳情
這篇文章主要介紹了JavaScript中數(shù)組reduce()方法使用詳情,reduce()對(duì)數(shù)組中的每個(gè)元素進(jìn)行累加,返回一個(gè)新的值,可以傳入初始值,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下下面文章介紹2022-09-09

