2013-04-16 24 views
0

我在右鍵單擊頁面中的按鈕時顯示上下文菜單。用於顯示上下文菜單的代碼是在調用oncontextmenu時未定義Firefox的事件

window.addEventListener('contextmenu',function (e){e.preventDefault();},false);} 

當我右鍵點擊該按鈕,稱爲上下文菜單的方法是

displaycontextmenu(obj,event) 
{ 
     console.log("Context"); 
     console.log(event); 
     // Displaying context menu 
} 

的代碼執行罰款,IE瀏覽器,即使在鉻,我可以看到在控制檯,「上下文」和事件打印。但在Firefox中,它打印爲「上下文」和undefined。 我真的很困惑,看到這個事件是未定義的。

我正在使用該事件來獲取x和y座標以在正確的位置顯示上下文菜單。由於事件未定,因此無法繼續進行。

+0

您將「displaycontextmenu(event)'處理程序附加到窗口的contextmenu事件偵聽器的位置? – NINCOMPOOP

回答

3

你可以看到event顯示在Chrome和IE的控制檯中的原因是IE一直有將事件對象分配給全局引用(window.event)的不良習慣。
Chrome已經正確實現了W3C模型,並將事件對象傳遞給處理程序,但是保留了該事件對象的全局引用,以防萬一。

嘗試記錄obj,它會在FF中記錄事件對象...我對此相當有信心。 Chrome的行爲方式也完全相同:事件對象將傳遞給處理程序。

由於event參數未定義,我只能假設event要麼忽略(作爲保留關鍵字進行處理,但僅靜靜),或有一些後面的幕後範圍掃描正在進行能解決本地event全球[window.]event

在任何情況下,使用varnames可能是關鍵字,或者已經存在(如documentwindowthis)要麼不允許或皺眉。這就是爲什麼你會經常看到這樣的:

function eventHandler (e) 
{ 
    e = e || event; 
} 

e被允許作爲varname的,並沒有名稱衝突,除非我們自己創造一個。如果處理程序沒有收到事件對象,我們參考event,由於示波器掃描,這將被解析爲window.event

相關問題