解決FireFox下 使用event很麻煩 的問題

2021-09-05 14:15:56 字數 1682 閱讀 7140

在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.使用的時候在需要的...