我正在尝试开发一个在html中创建菜单的javascript对象。 该函数接收一个对象作为参数。对象元素中的一个函数应该在从我的对象的方法调用的事件处理程序中执行。
这是我的代码:
Menu = function(config) {
var j = 0;
this.config = config;
this.make = function() {
for (i = 0; i < this.config.items.length; i++) {
var vid = document.createElement("div");
vid.className = this.config.cls;
vid.id += i;
document.body.appendChild(vid);
var txt = document.createTextNode(this.config.items[i]);
var pp = document.createElement("p");
pp.appendChild(txt);
vid.appendChild(pp);
}
document.addEventListener("keydown", this.scrolldown, false);
document.onkeydown = function(e) {
var keyCode = e.keyCode;
alert("functional");
if (keyCode == 40) {
alert("You hit key down");
var et = document.getElementById(j);
this.config.trait1(et);
j = j + 1;
} else {
alert("no");
}
}
};
return this;
};
当我在实例化对象后调用函数make时,我创建了元素,但由于以下原因未处理我的事件:
未捕获的TypeError:无法调用未定义的方法'trait1'。
任何人都可以帮助我吗?我看到了同一个问题的许多答案,但没有一个建议的解决方案有效。
答案 0 :(得分:4)
this
函数中的 Menu
与this
函数中的onkeydown
不同。
将this
的值存储在另一个变量中并使用它。
Menu = function () {
var myMenu = this; // I'm assuming that you will be calling `new Menu()`
document.onkeydown = function () {
myMenu.config.etc.etc.etc
}
}