JavaScript实现添加及删除事件的方法小结
作者:流萤时间:2026-10-29 13:09:37浏览:660
本文总结了JavaScript中添加和删除事件绑定的多种实现方式,涵盖从简单示例到完整兼容IE与Firefox的通用工具函数。通过具体代码实例,展示了如何动态控制事件触发次数并在指定次数后移除监听器,帮助开发者掌握灵活的事件管理机制。
JavaScript事件绑定与解绑概述
本文汇总了JavaScript中实现事件绑定与解绑的相关技巧,供读者参考学习。
在JavaScript开发中,添加和删除事件的方法通常用于控制特定函数的执行次数。例如,可以设置某个方法仅执行一次、两次或多次,当达到预设的执行次数后,自动移除该事件监听,使其不再生效。这种机制在实际编程中应用广泛。
基础事件处理示例
首先,我们来看一个较为基础的示例。
function $(id)
{
return document.getElementByIdx_x(id);
}
var ev = null;
var count1 = 0;
var count2 = 0;
var oncount1 = 0;
var oncount2 = 0;
var isSetEv1 = false;
var isSetEv2 = false;
//创建事件的通用函数
var EventUtil = function(){};
var flag = new Flag();
//监控变量值
function Flag()
{
var tempflag = false;
var method = null;
this.SetMethod = function(value)
{
method = value;
}
this.SetValue = function(value)
{
tempflag = value;
if(tempflag == true && method){eval_r(method)}
}
this.GetValue = function()
{
return tempflag;
}
}
EventUtil.addEventHandler = function(obj,EventType,Handler)
{
//如果是FF
if(obj.addEventListener)
{
obj.addEventListener(EventType,Handler,false);
}
//如果是IE
else if(obj.attachEvent)
{
obj.attachEvent('on'+EventType,Handler);
}
else
{
obj['on'+EventType] = Handler;
}
}
//取消事件传入的参数值要跟绑定时完全一样才可以
EventUtil.removeEventHandler = function(obj,EventType,Handler)
{
//如果是FF
if(obj.removeEventListener)
{
obj.removeEventListener(EventType,Handler,false);
}
//如果是IE
else if(obj.detachEvent)
{
obj.detachEvent('on'+EventType,Handler);
}
else
{
obj['on'+EventType] = Handler;
}
}
function setEvent1(e)
{
ev = e;//针对火狐获取event相关属性
flag.SetMethod('addList1()');
flag.SetValue (true);
}
function setEvent2(e)
{
ev = e;//针对火狐获取event相关属性
flag.SetMethod('addList2()');
flag.SetValue (true);
}
function isSetEvent1(state)
{
isSetEv1 = state;//ie下方法名不能和全局变量名相同
}
function isSetEvent2(state)
{
isSetEv2 = state;
}
function add1(obj)
{
oncount1 = oncount1 + 1;
if(isSetEv1)
{
obj.innerHTML = "设置了事件,添加了 <b>" + oncount1 + "</b> 篇文章,左边列表1自动增加!";
}
else
{
obj.innerHTML = "没有设置事件,添加了 <b>" + oncount1 + "</b> 篇文章,左边列表1没有变化!";
}
}
function add2(obj)
{
oncount2 = oncount2 + 1;
if(isSetEv2)
{
obj.innerHTML = "设置了事件,添加了 <b>" + oncount2 + "</b> 篇文章,左边列表2自动增加!";
}
else
{
obj.innerHTML = "没有设置事件,添加了 <b>" + oncount2 + "</b> 篇文章,左边列表2没有变化!";
}
}
function addList1()
{
count1 = count1 + 1;
$("list1").innerHTML = "动态添加了 <b>" + count1 + "</b> 篇文章了!";
}
function addList2()
{
count2 = count2 + 1;
$("list2").innerHTML = "动态添加了 <b>" + count2 + "</b> 篇文章了!";
}
简化版事件处理实现
接着,展示一个经过简化的实现案例。
//通用的添加和删除事件的方法(兼容IE和firefox)
function AddEventHandler(oTarget, sEventType, fnHandler){
if (oTarget.addEventListener) {//非IE
oTarget.addEventListener(sEventType, fnHandler, false);
}else if (oTarget.attachEvent) {//IE
oTarget.attachEvent('on' + sEventType, fnHandler);
}else {
oTarget['on' + sEventType] = fnHandler;
}
}
function RemoveEventHandler(oTarget, sEventType, fnHandler){
if (oTarget.removeEventListener) {//非IE
oTarget.removeEventListener(sEventType, fnHandler, false);
}else if (oTarget.detachEvent) {//IE
oTarget.detachEvent('on' + sEventType, fnHandler);
}else {
oTarget['on' + sEventType] = null;
}
}
完整兼容实例展示
最后,提供一个结构完整的综合实例。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JavaScript添加、删除事件的方法</title>
<script type="text/javascript">
var EventUtil=new Object;
EventUtil.addEvent=function(oTarget,sEventType,funName){
if(oTarget.addEventListener){//for DOM;
oTarget.addEventListener(sEventType,funName, false);
}else if(oTarget.attachEvent){
oTarget.attachEvent("on"+sEventType,funName);
}else{
oTarget["on"+sEventType]=funName;
}
};
EventUtil.removeEvent=function(oTarget,sEventType,funName){
if(oTarget.removeEventListener){//for DOM;
oTarget.removeEventListener(sEventType,funName, false);
}else if(oTarget.detachEvent){
oTarget.detachEvent("on"+sEventType,funName);
}else{
oTarget["on"+sEventType]=null;
}
};
function removeClick(){
alert("click");
var oDiv=document.getElementById("odiv");
oDiv.style.cursor="auto";
EventUtil.removeEvent(oDiv,"click",removeClick);
}
function addLoadEvent(func){
var oldonload=window.onload;
if(typeof window.onload !="function"){
window.onload=func;
}else{
window.onload=function(){
oldonload();
func();
}
}
}
addLoadEvent(addClick);
function addClick(){
var oDiv=document.getElementById("odiv");
oDiv.style.cursor="pointer";
EventUtil.addEvent(oDiv,"click",removeClick);
}
</script>
</head>
<body>
<p>第一次点的时候弹出警告,并移除click事件,再点点击就失效了</p>
<div id="odiv" style="background:#003399; height:70px; width:126px; margin:0 auto; color:skyblue; ">第一次警告,第二次没反应!</div>
</body>
</html>
希望上述内容能对您的JavaScript编程实践提供有益帮助。
作者最新文章
JavaScript将图片转换为Base64编码的两种途径
2026-11-05 16:43:05
怎么在 Vue 或 React 项目中正确集成 animate.js
2026-11-05 10:23:38
JS注册事件:addEventListener基础语法与参数详解
2026-11-05 08:44:56
JSP和JS的区别:运行环境与服务端/客户端职责解析
2026-11-04 23:34:36
pdf.js 官方下载地址:GitHub Release 获取预编译包
2026-11-04 23:07:27
