在我们写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;
}
}
网友评论