在我們寫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.preventDefault){//其他瀏覽器
e.preventDefault();
}else{ //IE瀏覽器
e.returnValue=false;
}
}