實現比較通用的DOM事件掛載、事件解除安裝(相容)
/**
* DOM 事件掛載
* el DOM元素
* eventName 事件名
* listener 監聽函式
* capture 是否是捕獲階段
*/
function install(el, eventName, listener, capture) {
if (el.addEventListener) {
el.addEventListener(eventName, listener, capture);
}else {
el.attachEvent('on' + eventName, listener);
}
}
/**
* DOM 事件解除安裝
* el DOM元素
* eventName 事件名
* listener 監聽函式
* capture 是否是捕獲階段
*/
function uninstall(el, eventName, listener, capture) {
if (el.removeEventListener) {
el.removeEventListener(eventName, listener, capture);
}else {
el.detachEvent('on' + eventName, listener);
}
}
下面來測試一下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
</head>
<body>
<div id="clickDiv" style="height:100px;width:100px;background:green;"></div>
<button id="install">事件掛載</button>
<button id="uninstall">事件解除安裝</button>
</body>
<script>
/**
* DOM 事件掛載
* el DOM元素
* eventName 事件名
* listener 監聽函式
* capture 是否是捕獲階段
*/
function install(el, eventName, listener, capture) {
if (el.addEventListener) {
el.addEventListener(eventName, listener, capture);
}else {
el.attachEvent('on' + eventName, listener);
}
}
/**
* DOM 事件解除安裝
* el DOM元素
* eventName 事件名
* listener 監聽函式
* capture 是否是捕獲階段
*/
function uninstall(el, eventName, listener, capture) {
if (el.removeEventListener) {
el.removeEventListener(eventName, listener, capture);
}else {
el.detachEvent('on' + eventName, listener);
}
}
(function(){
var clickDiv = document.getElementById("clickDiv");
var installButton = document.getElementById("install");
var uninstallButton = document.getElementById("uninstall");
installButton.onclick=function(){
install(clickDiv, 'click', divClick, false);
}
uninstallButton.onclick=function(){
uninstall(clickDiv, 'click', divClick, false);
}
function divClick(){
console.log('divClick');
}
})()
</script>
</html>
剛進來頁面的時候,點選div沒有反應,點選事件掛載按鈕以後,再點選DIV會列印,因為事件被掛載了:
然後再點選事件解除安裝,div的點選就沒有列印了,因為事件已經被解除安裝了
是相容IE的,給個贊吧!
相關文章
- React 事件和 Dom 事件React事件
- Linux裝置掛載和解除安裝Linux
- Dom事件事件
- DOM - 事件事件
- linux磁碟掛載與解除安裝Linux
- DDD中事件與命令比較事件
- jQuery實現DOM元素事件動態繫結jQuery事件
- [Linux]檔案掛載和解除安裝Linux
- DOM事件類事件
- 在DISM中,掛載(Mounting)和解除安裝(Unmounting)掛載點(Mount Point)索引號(Index)解除安裝(Unmounting)索引Index
- DOM0事件和DOM2事件模型 —— JS中的設計模式和元件封裝事件模型JS設計模式元件封裝
- 事件風暴與領域故事的比較事件
- DOM 事件詳解事件
- DOM事件機制事件
- js Dom之事件JS事件
- 【Windows】 多個net framework 版本,怎麼解除安裝比較老的WindowsFramework
- 如何優雅的封裝一個DOM事件庫封裝事件
- javaScript事件,Bom,Dom物件JavaScript事件物件
- 比較Java Swing中三種註冊事件的方法Java事件
- Mac 下 brew的解除安裝 外掛Mac
- fxfactory解除安裝不乾淨?Fxfactory及外掛解除安裝教程
- WebSockets與伺服器傳送事件SSE比較Web伺服器事件
- 事件流平臺Kafka、Pulsar和RabbitMQ比較 - Picnic事件KafkaMQ
- CloudFoundry命令列安裝和解除安裝外掛Cloud命令列
- 查詢語句系列—掛載和解除安裝資料
- 刪除事件(解綁事件)/ 刪除事件相容性解決方案事件
- React合成事件和DOM原生事件混用須知React事件
- yum安裝與原始碼安裝比較原始碼
- jQuery事件中on實現繫結多個事件jQuery事件
- LVS和Nginx實現負載均衡功能的比較Nginx負載
- Linux系統下無法解除安裝掛載的解決辦法Linux
- 深入理解DOM事件機制事件
- JS裡關於事件的常被考察的知識點:事件流、事件廣播、原生JS實現事件代理JS事件
- React 為什麼要把事件掛載到 document 上 & 事件機制原始碼分析React事件原始碼
- python使用裝飾器實現的事件中心(監聽器)Python事件
- 自定義事件相容處理物件事件物件
- javascript避免dom事件重複觸發JavaScript事件
- vue:移動端判斷鍵盤事件,相容安卓iosVue事件安卓iOS