美文网首页
event获取兼容写法及阻止冒泡和默认事件

event获取兼容写法及阻止冒泡和默认事件

作者: JuanitaLee | 来源:发表于2018-08-02 14:09 被阅读73次

    在我们写js的时候经常要用到event对象,你可能用它来阻止事件冒泡,或者阻止浏览器的默认行为,也可能得到鼠标的点击位置,鼠标的按键信息,还有可能得到键盘的按键信息,功能键的状态等。

    首先我们来看下如何获取event对象呢?

    第一种方法
    <div class='cont' onclick='getEvent()'>
    function getEvent(){
        var evt=window.event||arguments.callee.caller.arguments[0];
    }
    

    如果我们的事件中不给传递event对象的情况下,在IE中,event对象是作为window的属性的全局变量,我们可以很轻松的得到。但是在火狐浏览器下,event对象是一种现场对象,只有在事件触发的时候才会生成,她会作为火狐浏览器的响应事件的第一个参数传入。

    解释一下arguments.callee.caller.arguments[0]:

    当执行onclick=”getEvent()”时arguments.callee就是getEvent(),arguments.callee.caller就是function onclick,onclick的第一个能数就是event,也就是arguments.callee.caller.arguments[0]。这个在火狐下得到event对象的方法有一个限制,那就是函数不能在层次调用后再通过此方法得到event对象。

    <div class='cont' onclick='getEvent()'>
    function getEvent(){
           initEvent();
        }
    function initEvent(){
    var evt=window.event||arguments.callee.caller.arguments[0];//火狐下将得不到event对象。
    }
    

    像上面这种写法就是层次调用了,这个时候在内层方法中火狐用此方法是得不到event对象的。

    第二种方法
    function a(e){
    e=e||window.event;
    alert(e.keyCode);
    } 
    

    ie浏览器如下调用 :<body onclick="a()">
    firefox火狐浏览器如下调用 <body onclick="a(event)">

    阻止冒泡事件兼容写法

    function stopBubble() {
        var e = window.event||arguments.callee.caller.arguments[0];
        if(e && e.stopPropagation){//其他浏览器
            e.stopPropagation();
        }else{ //IE浏览器
            e.cancelBubble = true;
        }
    }
    

    阻止默认事件兼容写法

    很多的网页元素都会有默认的行为,比如说当你点击一下超链接a标签的时候,它会有一个跳转的行为;当你在网页上点鼠标右键时会出现一个右键菜;当你在一个form表单里点击提交按钮时网页会产生提交行为并刷新网页,当你网页上滚动鼠标滚轮时,网页的滚动条会动等等。这些都叫事件的默认行为,我们如果不需要,可以将这些事件阻止掉。

    function stopEvent() {
        var e = window.event||arguments.callee.caller.arguments[0];
        if(e && e.stopPropagation){//其他浏览器
           e.preventDefault();
        }else{ //IE浏览器
            e.returnValue=false;
        }
    }
    

    相关文章

      网友评论

          本文标题:event获取兼容写法及阻止冒泡和默认事件

          本文链接:https://www.haomeiwen.com/subject/cmgjvftx.html