有没有办法将一个变量传递给keypressed函数?
问题描述:
我正在尝试将文档和按键按下的控件发送到按键功能。有没有办法将一个变量传递给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);
}
答
最简单的方法是将其附加到元素,将触发事件,但可以使用全局变量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); }
(文档)在这种情况下不起作用,因为多个选项卡是打开的,可能还有相同的页面和元素。我不想修改所有这些只是创建事件的人。你可以从它上面的控件返回文档吗?不幸的是,全局变量可能是我唯一的出路。 – Anon 2010-08-05 02:39:26
如果你有'doc'变量,像传递'someVar'那样传递它。 – draganHR 2010-08-05 08:07:29
doc不是可以在onPageLoad函数之外使用的全局变量,而keypressed是MyExt.Browseroverlay命名空间之外的私有函数。 var target = e.currentTarget; //返回控件而不是文档。 我正在努力获得这两个。 – Anon 2010-08-05 14:59:53