zoukankan      html  css  js  c++  java
  • 跨浏览器事件

    上次面试被问到关于与事件委托的问题,当时没打出来,晚上有空整理了一下,做一个总结。

    事件,在标准DOM和IE间标准不同,所以一般要跨浏览器就要手写跨浏览器事件。

    DOM 0 级 指的就是 btn.click(function(){}) 这种的

    DOM 2 级 指的就是 btn.addEventListener(event,f,true/false); 注意一点就是最后一个参数 trur指的是捕获,false在冒泡是发生

    DOM 1级 我也不知道这是什么鬼


    奇葩的IE 首先IE只支持捕获,不支持冒泡,哦 btw 事件的三个阶段分别是 捕获--》触发--》冒泡

    由于IE只支持冒泡,所以通用是写通用事件时,DOM的第三个参数要设为false才会统一;

    还有值得一提的是,这下彻底理解 evt=event||window.event; 所代表的含义了,就是兼容事件

    比如点击时就会触发事件,这是浏览器就会产生一个事件对象,这个事件对象中有一些属性和方法,比较重要的有以下这几个

    DOM中 target:表示目标锚点,这个很精确 preventDefault() 这个就是阻止默认事件发生 stopPropagation() 阻止冒泡

    IE中 srcElement就是DOM中的target returnValue设置为false就可以取消默认事件 cancelBubble 设置为true就是stopPropagation

    然后事件委托就变得很简单,比如一列li 标签,逐个绑定太麻烦,消耗性能,就可以考虑事件委托,让事件绑定在父元素上,用target.id来分流

    事件通用代码如下

    可以处理事件绑定,注意最后的 event=getEvent(event) 木有加var 说明他是全局的

    var commonEvent = {
    
        addEvent: function (element, event, f) {
            if (element.addEventListener) {
                element.addEventListener(event, f, false)
            }
            if (element.attachEvent) {
                element.attachEvent("on" + event, f)
            }
            else {
                event["on" + event] = f;
            }
        },
    
        removeEvent: function (element, event, f) {
            if (element.removeEventListener) {
                element.removeEventListener(event, f, false)
            }
            if (element.removeEvent) {
                element.detachEvent("on" + event, f)
            }
    
            else {
                event["on" + event] = null;
            }
        },
    
        getEvent: function (event) {
            return event = event ? event : window.event;
        },
    
        getTarget: function (event) {
            return  target = event.target || event.srcElewment;
        },
    
        stopPropagation: function (event) {
            if (event.stopPropagation) {
                event.stopPropagation();
            }
            else {
                event.cancelBubble = true;
            }
        },
        preventDefault: function (event) {
            if (event.preventDefault) {
                event.preventDefault();
            }
            else {
                eventReturnValue = false;
            }
        }
    };
    
    bt.onclick = function (event) {
        event = commonEvent.getEvent(event);
        var target = commonEvent.getTarget(event);
    };
  • 相关阅读:
    反射
    IO流
    集合(下)
    集合(上)
    泛型
    异常
    常用类
    内部类
    将博客搬至CSDN
    DBMS_ERRLOG记录DML错误日志(二)
  • 原文地址:https://www.cnblogs.com/liuestc/p/5240475.html
Copyright © 2011-2022 走看看