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以获取更多信息。

相关问题