Javascript 有没有办法将变量传递给按键功能?
我正在尝试将按下该键的文档和控件发送到按键功能 这是我的密码:Javascript 有没有办法将变量传递给按键功能?,javascript,firefox-addon,addeventlistener,dom-events,xul,Javascript,Firefox Addon,Addeventlistener,Dom Events,Xul,我正在尝试将按下该键的文档和控件发送到按键功能 这是我的密码: //Namespace MyExt.BrowserOverlay = { init: function() { var appcontent = document.getElementById("appcontent"); // browser if(appcontent) appcontent.addEventListener("DOMContentLoaded"
//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);
传递变量的最简单方法是将其附加到将触发事件的元素,但您可以使用全局变量
document
访问文档
对于事件侦听器,浏览器处理事件的方式不同:
您可以使用
gBrowser.contentDocument
获取当前所选选项卡的文档。有关详细信息,请参见选项卡式浏览器控件上的此项。(文档)在这种情况下不起作用,因为多个选项卡处于打开状态,并且可能具有相同的页面和元素。我不想全部修改,只想修改创建事件的那个。您能从其上的控件返回文档吗?不幸的是,全局变量可能是我唯一的解决方法。如果您有doc
变量,请像我传递someVar
一样传递它。doc不是可以在onPageLoad函数之外使用的全局变量,而keypressed是MyExt.browserverlay命名空间之外的私有函数。var目标=e.currentTarget//返回控件而不是文档。我正试图两者兼得。
function keypressed(a,doc){
alert(a); //a relates to keypress
alert(doc.innerHTML);
}
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);
}