0

我正在嘗試將文檔和按鍵按下的控件發送到按鍵功能。有沒有辦法將一個變量傳遞給keypressed函數?

這裏是我的代碼:

//Namespace 
MyExt.BrowserOverlay = { 
    init: function() { 
     var appcontent = document.getElementById("appcontent"); // browser 
     if(appcontent) 
       appcontent.addEventListener("DOMContentLoaded", MyExt.BrowserOverlay.onPageLoad, true); 
    }, 

    onPageLoad: function(aEvent) { 
       var doc = aEvent.originalTarget; 
       if (doc.location.href == "http://something.com"){ 
        var txtBox = doc.getElementById('txtBox'); 
         txtBox.addEventListener('keypress', keypressed, false); //Error Line 
           } 
       }, 

...

是這樣的:通過可變


txtBox.addEventListener('keypress', keypressed(?,doc), false); 

function keypressed(a,doc){ 
    alert(a); //a relates to keypress 
    alert(doc.innerHTML); 
} 

回答

0

最簡單的方法是將其附加到元素,將觸發事件,但可以使用全局變量document訪問文檔。

至於事件偵聽器,瀏覽器不同的方式處理事件:

txtBox.someVar = "foobar"; // Any variable you want to pass 

if(window.addEventListener){ // Firefox, Chrome... 
txtBox.addEventListener('keypress', keypressed, false); 
} else { // IE 
txtBox.attachEvent('onkeypress', keypressed); 
} 

 

function keypressed(event){ 

// find event object 
var e = event || window.event; 

// find target object 
var target = e.currentTarget; 
if (e.target) target = e.target; 
else if (e.srcElement) target = e.srcElement; 
if (target.nodeType == 3) target = targ.parentNode; 

// find key code 
var code = e.charCode || e.keyCode; 

alert(String.fromCharCode(code)); 
alert(target.someVar); 
alert(document.body.innerHTML); 

} 
+0

(文檔)在這種情況下不起作用,因爲多個選項卡是打開的,可能還有相同的頁面和元素。我不想修改所有這些只是創建事件的人。你可以從它上面的控件返回文檔嗎?不幸的是,全局變量可能是我唯一的出路。 – Anon 2010-08-05 02:39:26

+0

如果你有'doc'變量,像傳遞'someVar'那樣傳遞它。 – draganHR 2010-08-05 08:07:29

+0

doc不是可以在onPageLoad函數之外使用的全局變量,而keypressed是MyExt.Browseroverlay命名空間之外的私有函數。 var target = e.currentTarget; //返回控件而不是文檔。 我正在努力獲得這兩個。 – Anon 2010-08-05 14:59:53

0

您可以使用gBrowser.contentDocument獲取當前所選選項卡的文件。在標籤瀏覽器控件上查看此article以獲取更多信息。

相關問題