在firefox下編寫事件處理函式是很麻煩的事.
因為firefox並沒有 window.event . 如果要得到 event 物件,就必須要宣告時間處理函式的第乙個引數為event.
所以為了相容ie與firefox,一般的事件處理方法為:
btn.οnclick=handle_btn_click;
function handle_btn_click(evt)
對於簡單的程式,這不算麻煩.
但對於一些複雜的程式,某寫函式根本就不是直接與事件掛鉤的.如果要把event傳進該引數,那麼所有的方法都要把event傳來傳去..這簡直就是噩夢.
下面介紹乙個解決這個麻煩事的方法,與原理.
jscript中,函式的呼叫是有乙個 func.caller 這個屬性的.
例如
function a()
function b()
如果b被a呼叫,那麼b.caller就是a
另外,函式有乙個arguments屬性. 這個屬性可以遍歷函式當前執行的引數:
function myalert()
alert("hello","world",1,2,3)
就能顯示 hello-world-1-2-3
(arguments的個數與呼叫方有關,而與函式的引數定義沒有任何關係)
根據這兩個屬性,我們可以得到第乙個函式的event物件:
btn.οnclick=handle_click;
function handle_click()
function showcontent()
function searchevent()
func=func.caller; }
return null; }
這個例子使用了searchevent來搜尋event物件. 其中 'event' 是 firefox 的 event.constructor .
在該例子執行時,
searchevent.caller就是showcontent,但是showcontent.arguments[0]是空.所以 func=func.caller 時,func變為handle_click .
handle_click 被 firefox 呼叫, 雖然沒有定義引數,但是被呼叫時,第乙個引數就是event,所以handle_click.arguments[0]就是event !
針對上面的知識,我們可以結合 prototype.__definegetter__ 來實現 window.event 在 firefox 下的實現:
下面給出乙個簡單的**.. 有興趣的可以補充
if(window.addeventlistener)
function fixprototypeforgecko()
function element_prototype_get_runtimestyle()
function window_prototype_get_event()
function event_prototype_get_srcelement()
function searchevent()
func=func.caller; }
return null; }
解決FireFox下 使用event很麻煩 的問題
在firefox下編寫事件處理函式是很麻煩的事.因為firefox並沒有 window.event 如果要得到 event 物件,就必須要宣告時間處理函式的第乙個引數為event.所以為了相容ie與firefox,一般的事件處理方法為 btn.nclick handle btn click func...
Linux下hexdump命令除錯event驅動
hexdump 檢視檔案的內容,比如二進位制檔案中包含的某些字串,通常用來除錯驅動用 描述 我們以event1為例,當我們insmod掛載了鍵盤驅動後,出現乙個event1裝置,此時沒有按鍵按下,所以event1裡面的資料是沒有的,那麼資料又是從來 來?通過鍵盤驅動的read函式,若有按鍵按下,就會...
firefox無法使用yslow的解決方案
首先,yslow不支援firefox 36及以上版本。解決方案 使用yslow的書籤版本 使用方法 1.訪問這裡 2.把頁面最後的那個 desktop bookmarklet installation instructions 裡的 yslow 按鈕拖拽到火狐的書籤工具欄即可。3.使用的時候在需要的...