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

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

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

第一种方法
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对象。

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浏览器如下调用 :
firefox火狐浏览器如下调用

阻止冒泡事件兼容写法

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.preventDefault){//其他浏览器
       e.preventDefault();
    }else{ //IE浏览器
        e.returnValue=false;
    }
}

你可能感兴趣的:(event获取兼容写法及阻止冒泡和默认事件)