• 技术文章 >web前端 >js教程

    跨浏览器的事件对象介绍_javascript技巧

    2016-05-16 17:52:18原创633
    复制代码 代码如下:

    var eventUtil = {
    getEvent : function(event){
    return event ? event : window.event;
    };
    getTarget : function(event){
    return event.target || event.srcElement;
    };
    preventDefault : function(event){
    if(event.preventDefault){
    event.preventDefault();
    }else{
    event.returnValue = false;
    }
    };
    stopPropagation : function(event){
    if(event.stopPropagation){
    event.stopPropagation();
    }else{
    event.cancelBubble = true;
    }
    };
    };

      当使用一个DOM兼容的浏览器时,event 变量仅仅是传入并被返回,在IE中event参数将是undefined ,因此window.event将会被返回,所以采用eventUtil.getEvent()方法无论在dom还是IE上event返回值都是可用的。
      同理第二个方法,getTarge()方法,先检测event对象的target属性,如果存在,则返回targe,若为IE浏览器则返回srcElement属性。保证兼容性。
    复制代码 代码如下:

    btn.onclick = function(event){
    event = EventUtil.getEvent(event);
    var target = EventUtil.getTarget(event);
    };

      第三个方法,preventDefault ()方法,当event对象传入时,先检测event对象的preventDefault()方法是否可用,若可用则调用preventDefault方法,若不可用将event的returnValue 设置为false。
      例如:
      
    复制代码 代码如下:

    var link = document.getElementById("myLink");
    link.onclick = function(event){
    event = EventUtil.getEvent(event);
    EventUtil.preventDefault(event);
    };

      这段代码阻止了一个link标签的默认行为,event对象来自于EventUtil的getEvent方法的返回值 并作为preventDefault()方法的传入参数。
      第四个方法stopPropagation(),用同样的方法,首先尝试DOM方法,之后尝试cancelBubble属性,例如下面的代码:
    复制代码 代码如下:

    var btn = document.getElementById("myBtn");
    btn.onclick = function(event){
    alert("Clicked");
    event = EventUtil.getEvent(event);
    EventUtil.stopPropagation(event);
    };
    document.body.onclick = function(event){
    alert("Body clicked");
    };

    记得这个方法可能阻止事件在浏览器的冒泡阶段 或者 同时阻止事件在浏览器的冒泡和捕获阶段。
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:事件对象
    上一篇:JavaScript中的面向对象介绍_js面向对象 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 一文浅析node中如何使用消息队列• 【翻译】使用自定义hooks对React组件进行重构• 一文详解Node中express的身份认证• Angular学习之聊聊生命周期• 一文带你了解node中的的模块系统
    1/1

    PHP中文网