• 跨浏览器的事件处理程序和对象


    跨浏览器的事件处理程序和对象

    为了解决各种浏览器的差异问题,往往我们需要能够跨浏览器的程序。很多人会通过使各种的JavaScript库来解决这些问题,当然了,如果要自己编写也可以,通过使用能力检测的方法即可,从而让同一段代码在多数浏览器下一致运行。

    • 创建一个addHandler()方法
    • 创建一个removeHandler()方法
    var EventUtil = {
        addHandler:function(element, type, handler){
            if (element.addEventListener){
                element.addEventListener(type, handler,false);
            }else if (element.attachEvent){
                element.attachEvent("on"+type, handler);//在事件类型前添加 on
            } else{
                element["on" + type]=handler;//给元素对象属性绑定监听函数,element.ontype
            }
        },//这要添加一个逗号
        
        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;
            }
        }
    };
    
    

    使用

    var btn = document.getElementById("myBtn");
    var handler = function(){
        alert("Clicked");
    };
    EventUtil.addHandler(btn, "click", handler); 
            
    var removeBtn = document.getElementById("myRemoveBtn");
    EventUtil.addHandler(removeBtn, "click", function(){
        EventUtil.removeHandler(btn, "click", handler); 
    });
    
    • 创建一个getEvent()方法
    • 创建一个getTarget()方法
    • 创建一个preventDefault()方法
    • 创建一个stopPropagation()方法
    var EventUtil = {
        addHandler:function(element, type, handler){//添加事件监听函数
            if (element.addEventListener){
                element.addEventListener(type, handler,false);
            }else if (element.attachEvent){
                element.attachEvent("on"+type, handler);//在事件类型前添加 on
            } else{
                element["on" + type]=handler;//给元素对象属性绑定监听函数,element.ontype
            }
        },//这要添加一个逗号
        
        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;
            }
        },
        
        getEvent: function(event){//获取事件对象
            return event ? event : window.event;
        },
      
        getTarget: function(event){//获取事件对象目标
            return event.target || event.srcElement;
        },
        
        preventDefault: function(event){//阻止默认事件发生
            if (event.preventDefault){//标准event方法
                event.preventDefault();
            } else {
                event.returnValue = false;//IE属性,取消默认行为发生
            }
        },
        
        stopPropagation: function(event){//阻止冒泡
            if (event.stopPropagation){//标准event方法,不再派发事件
                event.stopPropagation();
            } else {
                event.cancelBubble = true;/IE属性,阻止事件传播到包容对象
            }
        }
    };
    

    实例

    (1)
    
    var btn = document.getElementById("myBtn");
    btn.onclick = function(event){
        event = EventUtil.getEvent(event);//获取事件对象
        var target = EventUtil.getTarget(event);//获取事件目标
                
        alert(target.tagName);//弹出事件目标的标签名
    };
            
    EventUtil.addHandler(btn, "click", function(event){
        event = EventUtil.getEvent(event);
        var target = EventUtil.getTarget(event);
                
        alert(target.tagName);
    });
    
    (2)
    
    var link = document.getElementById("myLink");
    link.onclick = function(event){
        event = EventUtil.getEvent(event);
        EventUtil.preventDefault(event);//点击链接,没有反应,阻止了默认跳转行为
    };   
    
    (3)
    
    var btn = document.getElementById("myBtn");
    btn.onclick = function(event){//点击按钮弹出Clicked
        alert("Clicked");
        event = EventUtil.getEvent(event);//获取事件
        EventUtil.stopPropagation(event);//阻止冒泡
    };
            
    document.body.onclick = function(event){
        alert("Body clicked");//如果没有阻止冒泡,点击按钮后,先弹出clicked,然后弹出Body clicked,由于上面阻止冒泡了,所以这一步就不再发生了
    };
    
  • 相关阅读:
    MySQL Partition--分区基础
    MySQL Replication--跳过复制错误
    MySQL--SHOW PROCESSLIST
    MySQL InnoDB Engine--缓冲器数据交换
    MySQL InnoDB Engine--数据预热
    MySQL Profiling--常用命令
    Linux--用户管理
    vi和vim快捷键的使用
    vi和vim
    xftp使用
  • 原文地址:https://www.cnblogs.com/YeChing/p/6308632.html
Copyright © 2020-2023  润新知