2012-03-29 67 views
1

通常我會看到事件處理程序(如onmousemove)動態分配的JavaScript代碼。 實施例:'事件'參數在JavaScript事件處理程序中來自哪裏?

document.getElementById('foo').onmousemove = function(e) 
{ /* do some stuff with event e */ } 

顯然,這個 'e' 的參數是某種事件對象的。在哪裏來的,如:誰或什麼定義了這個'e'參數是什麼時候調用該函數,我也可以在靜態HTML中做到這一點? 我的意思是這樣的:

<div id='foo' onmousemove='Bla(e)'> ... </div> 

我應該怎麼填寫爲「E」,以獲取同一事件的事嗎?而且我可以還結合起來,與更多的參數,如

<div id='foo' onmousemove='Bla(this,e,4)'> ... </div> 

其中E是,再次,應該是事件對象?

+1

我相信這是對傳遞給你的回調事件處理函數的'window.event'的引用。 – asawyer 2012-03-29 13:09:24

+0

對,是的,謝謝,只是偶然發現了一些類似的東西。看來我可以在我自己的事件處理程序中使用window.event(即使是在html中設置的,也不一定是函數(e)類函數)。 – 2012-03-29 13:24:16

回答

1

事件對象存儲在window.event裏面的任何事件處理程序,所以你不必擔心你的處理程序符合接受它作爲參數。

在你的第二個和第三個例子中,e參數將被作爲未定義的,因爲存在於該範圍內沒有變量e(除非你有一個全球性的e)通過。

3

事件處理程序被定義爲callback方法。回調是(因此是表達式)在稍後時間從另一個進程調用。這是由事件觸發時的環境(本例中爲瀏覽器)完成的。

它調用您的回調函數並傳入event object

+0

好的,謝謝,所以根據定義,當動態分配一個事件處理函數(即在代碼中)時,它會認爲它是一個單參數函數,參數是事件對象?還有一種方法可以在'靜態'事件處理程序中獲取該事件對象,我的意思是那些在html中設置的事件(就像我的2 div示例)。 – 2012-03-29 13:08:38

+1

@SheldonPinkman:是的定義如此。不,你不能訪問沒有函數的事件對象。 – jAndy 2012-03-29 13:12:18

+0

好的,謝謝!哦,我不小心發現window.event似乎包含事件(至少這似乎在靜態事件處理程序中工作)。無論如何,這個回調的東西現在對我來說很清楚,再次感謝! – 2012-03-29 13:22:22

0

這就是所謂的回調方法。該事件最初由操作系統創建,發送到Web瀏覽器,然後通過JavaScript Event對象將它傳遞給您。

0

我不確定,但我認爲該事件是ActionEvent的一個對象實例。我不認爲ActionEvent可以手動實例化,所以你不能在靜態HTML中實現。即使這是可能的,但它肯定不是最佳實踐。

相關問題