• 跨浏览器事件处理


    我是inner
    IE的事件流是事件冒泡
                传播顺序
                div
                body
                html
                document
    
                IE9 FF Chrome safari将事件冒泡到window
    
            addEventListener(type, handler, boolean)
                type 为click load mouseover
                boolean true  事件捕获 在事件捕获阶段调用事件处理程序  body > wrap > inner
                        false 事件冒泡 在事件冒泡阶段调用事件处理程序  inner > wrap > body
    
                handler 事件处理程序 也就是事件函数
    
    
            removeEventListener(type, handler, boolean)
                handler 必须是与addEventListener中的函数是同一个函数(不能是内容相同的匿名函数 因为是指向两个内存区的代码结构相同的函数)
            //支持IE9 以上
    
    
            attachEvent(type, handler)
                type onclick onmouseover 
                handler 同上
                
            detachEvent(type, handler)
                type onclick onmouseover 
                handler 匿名函数 解绑无效
            //ie opera 专属


    var utilEvent = {
                addHandler: function (ele, type, handler) {
                    if(ele.addEventListener){
                        ele.addEventListener(type, handler, true);
                    }else if(ele.attachEvent){
                        ele.attachEvent("on" + type, handler)
                    }else{
                        ele["on" + type ] = handler;
                    }
                },
                removeHandler: function(ele, type, handler){
                    if(ele.removeEventListener){
                        ele.removeEventListener(type, handler, true)
                    }else if(ele.detach){
                        ele.detach("on" + type, handler)
                    }else{
                        ele["on" + type] = null;
                    }
                }
            } 
    
            var wrap = document.querySelector(".wrap");
            var inner = document.querySelector(".inner");
    
            function bubble_body(){
                alert("body is click");
            }
            function bubble_wrap(){
                alert("wrap is click");
            }
            function bubble_inner(){
                alert("inner is click");
            }
            utilEvent.addHandler(document.body, "click", bubble_body)
            utilEvent.addHandler(wrap, "click", bubble_wrap)
            utilEvent.addHandler(inner, "click", bubble_inner)
    

      

    事件冒泡
                触发由最具体的元素开始(嵌套最深的元素)接收 然后再逐级向上传播
                
                IE5.5及更早版本 事件冒泡会跳过html元素 
                IE9则将事件一直冒泡到window
    
            事件补捕获
                触发由最不具体的元素开始(document)接受 然后像内部传递
    
    
            DOM事件流
                事件捕获阶段 截或事件提供机会
                处于目标阶段 实际目标接到事件
    
  • 相关阅读:
    《剑指Offer》算法题——“旋转数组”的最小数字
    驱动是如何运行的
    Logistic回归,梯度上升算法理论详解和实现
    Python 字符串前面加'r'
    Python中文编码问题(字符串前面加'u')
    最大长度回文子串(Manacher's algorithm)
    没有重复字符的子串的最大长度
    Python格式化输出
    python strip()函数和Split函数的用法总结
    Python中的sorted函数以及operator.itemgetter函数
  • 原文地址:https://www.cnblogs.com/liuxiankun/p/8098308.html
Copyright © 2020-2023  润新知