天天看點

javascript事件:擷取事件對象getEvent函

在javascript開發中我們會經常擷取頁面中的事件對象,然後來處理這些事件,例如下面的getEvent函數就是擷取javascript下的頁面事件對象。

function getEvent(event){ 	return event || window.event; }      

我們使用getEvent的時候可以這樣調用。

function foo(event){ 	var evt = getEvent(event); 	alert(evt); }      

并且把foo函數綁定到一個onclick事件上。

但是常用的是foo函數不會有參數,或者第一個參數沒有傳入,我們可以通過

arguments[0]

來擷取第一個參數。

在IE中event是一個全局變量,即

window.event

,而在Firefox等浏覽器,事件會作為第一個參數傳入foo函數,是以getEvent可以改為:

function getEvent(event){ 	return arguments[0] || window.event; }      

這時在一些版本的浏覽器,例如Firefox 中會出現擷取不到event對象的問題,其實我們可以看成事件的觸發是下面的方式:

function onclick(event) {     foo(); }      

這樣,第一個函數是onclick,即event會預設作為第一個參數傳入,而foo函數沒有将event作為參數傳入,這樣嚴重限制了getEvent的靈活性,是以我們需要修改下getEvent函數。

function getEvent(){ 	if(window.event){ 		return window.event; 	} 	var f = arguments.callee.caller; 	do{ 		var e = f.arguments[0]; 		if(e && (e.constructor === Event || e.constructor===MouseEvent || e.constructor===KeyboardEvent)){ 			return e; 		} 	}while(f=f.caller); }      

chaunceyhao

繼續閱讀