js事件兼容处理

Posted CSS is awesome

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js事件兼容处理相关的知识,希望对你有一定的参考价值。

 

 

var eventUtil = {
    bindEvent: function(el, type, target, callback, popgation) {
        /**
         * @author zhangtian
         * @date 2017/11/16
         * @desc 标准浏览器与ie事件兼容处理
         * @augments el:事件源 type事件类型 callback回调函数 popgation是否冒泡
         * @todo ie8下调用stopPropagation 无效,知道原因的园工请留言告知或者发邮件给我,谢谢!!!
         */
        var caption = caption || true; //默认为冒泡

        //如果不使用事件代理,target置空
        if((typeof target) == "function") {
            callback = target;
            target = null;
        }

        if(el.addEventListener) {
            el.addEventListener(type, function(e) {
                if(target) {
                    console.log("事件代理");
                    if(e.target == target) {
                        callback.call(target, e); //改变this指向,如果不用call,this指向window
                    }
                } else {
                    console.log("普通事件");
                    callback.call(el, e); //改变this指向,如果不用call,this指向window
                }
            }, popgation);
        } else if(el.attachEvent) {
            el.attachEvent("on" + type, function() {
                var e = window.event;
                if(target) {
                    console.log("事件代理");
                    if(e.target == target) {
                        callback.call(target, e); //改变this指向,如果不用call,this指向window
                    }
                } else {
                    console.log("普通事件");
                    callback.call(el, e); //改变this指向,如果不用call,this指向window
                }
            });
        }
    },
    stopPropagation: function(e) {
        var event = e || window.event;
        if(event.stopPropagation) {
            event.stopPropagation();
        } else {
            event.cancelBubble;
        }
    },
    preventDefault: function(e) {
        var event = e || window.event;
        if(event.preventDefault) {
            event.preventDefault();
        } else {
            event.returnValue = false;
        }
    }
};

 

以上是关于js事件兼容处理的主要内容,如果未能解决你的问题,请参考以下文章

js事件兼容处理

JS常用事件兼容性处理方法

前端程序员的蜕变——JS的 event 对象属性使用实例兼容性处理(极大提高代码效率减少代码量)

存在不同浏览器间的JS兼容总结

十条jQuery代码片段助力Web开发效率提升

十条jQuery代码片段助力Web开发效率提升