我正在尝试创建一个无序列表菜单,但无法通过onclick来调用正确的函数。如何通过onclick函数传递对象的键?
function ulMenu(menuList) {
for (var keys in menuList) {
var li = document.createElement("li");
var textNode = document.createTextNode(keys);
li.appendChild(textNode);
li.onclick = function() { ?keys? };
ul.appendChild(li);
}
var element = document.getElementsByTagName("body")[0];
element.appendChild(ul);
}
window.onload = function() {
ulMenu({Register: Register,"Sign In": Login});
}
function Login() {
alert("Login Function");
}
function Register() {
alert("Register Function");
}
答案 0 :(得分:0)
您需要阅读how closures works in JavaScript,但这里是答案:
li.onclick = (function (keys) {
return function () {
//handler code
console.log(keys);
};
})(keys);
更有效的方法是在循环之外创建一个负责生成处理程序的函数。
function createClickHandler(keys) {
return function () {
//use keys
};
}
然后在循环中:
li.onclick = createClickHandler(keys);