支持匿名函数 事件处理对象

本文介绍了一种用于JavaScript的通用事件处理机制实现方式,包括事件监听和移除监听的方法。通过这种方式,可以有效地管理浏览器中元素的事件绑定,适用于各种跨浏览器的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

let hashHandle = {};
var addEvent = (function () {
    if(window.addEventListener)
    {
        return function (ele,type,fn,flag) {
            ele.addEventListener(type,function () {
                fn();
                hashHandle[type] = hashHandle[type] || [];
                hashHandle[type].push(arguments.callee);
            },flag)
        }
    }
    else if(window.attachEvent)
    {
        return function (ele,type,fn,flag) {
            ele.attachEvent("on" + type,function () {
               fn();
               hashHandle[type] = hashHandle[type] || [];
               hashHandle[type].push(arguments.callee);
            });
        }
    }

}());
var rmEvent = (function () {
    if(window.removeEventListener)
    {
        return function (ele,type) {
            if(hashHandle[type])
            {
                let i=0;
                for(i = 0;i<hashHandle[type].length;i++)
                {
                    ele.removeEventListener(type,hashHandle[type][i]);
                }
            }
        }
    }
    else if(window.attachEvent)
    {
        return function (ele,type) {
            if(hashHandle[type])
            {
                for(let i=0;i<hashHandle[type].length;i++)
                {
                    ele.detachEvent("on" + type,hashHandle[type][i]);
                }
            }
        }
    }
}());
var eventUtil = {
    getEvent:function (ev) {
        return ev ?ev : window.event;
    },
    getEventTarget:function (ev) {
        return ev.target || ev.srcElement;
    },
    addHandler:function(element,type,handler){ //添加事件
        if(element.addEventListener){
            element.addEventListener(type,handler,false);  //使用DOM2级方法添加事件
        }else if(element.attachEvent){                    //使用IE方法添加事件
            element.attachEvent("on"+type,handler);
        }else{
            element["on"+type]=handler;          //使用DOM0级方法添加事件
        }
    },

    removeHandler:function(element,type,handler){  //取消事件
        if(element.removeEventListener){
            element.removeEventListener(type,handler,false);
        }else if(element.detachEvent){
            element.detachEvent("on"+type,handler);
        }else{
            element["on"+type]=null;
        }
    },
    preventDefault: function (ev) {
        if(ev.preventDefault)
        {
            ev.preventDefault();
        } 
        else {
            ev.returnValue = false;
        }
    },
    stopPropagation:function (ev) {
        if(ev.stopPropagation) {
            ev.stopPropagation()
        }
        else {
            ev.cancelBubble = true;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值