实现比较通用的DOM事件挂载、事件卸载(兼容)
事件 实现 比较 卸载 通用 兼容 挂载 dom
2023-09-11 14:21:46 时间
/**
* 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的,给个赞吧!
相关文章
- Android开发之布局文件里实现OnClick事件关联处理方法
- 重温.NET下Assembly的加载过程 ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线
- iOS代码实现:创建按钮,绑定按钮事件,读取控件值
- Android Button响应事件两种实现方法及优劣比较
- Delphi TListview自绘某列添加图片按钮并实现点击事件响应
- taro 填坑之路(二)taro 通过事件监听 实现组件间传值
- Python-OpenCV下的窗口鼠标事件交互操作(实现鼠标移动轨迹的绘制)
- uni-app - 实现监听路由跳转,每次跳转的时候都能触发的事件(当页面路由发生变化时,触发一个封装好的请求接口或普通功能函数)全端兼容,高效简洁无 BUG 详细教程
- 《基于事件流的高效模式匹配》论文中文版
- CSDN日报190903:程序员离职事件始末
- Spring Boot 监听 Redis Key 失效事件实现定时任务
- QT 中实现QLabel的点击事件(重写QLabel)
- qt事件循环
- 委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别
- Android事件传递机制
- ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线
- 《PhoneGap移动应用开发手册》——1.4节通过加速计事件更新对象的显示位置
- SwiftUI NavigationLink内实现Button按钮独立响应事件(经典教程)
- 通俗解释什么是响应式编程?-响应式编程就是因为我们得“响应”这些事件而得以命名
- iOS开发系列之运动事件
- 企业信息安全事件爆发式增长 年损失超百亿
- Unity 进阶 之 UGUI 实现动态数据动态翻页显示效果的简单封装(动态更新数据动态更新显示,包括页码和按钮事件等功能)
- Unity 基础 之 实现简单监听晃动(摇一摇)手机设备震动手机设备的事件的功能
- Android开发之PullToRefresh的Click点击事件的监听实现长按删除Item
- 【Android】按钮点击事件的常用写法