Javascript 传递一个对象';onclick函数的s键

Javascript 传递一个对象';onclick函数的s键,javascript,Javascript,我试图创建一个无序的列表菜单,但无法让onclick调用正确的函数。如何通过onclick函数传递对象的键 function ulMenu(menuList) { for (var keys in menuList) { var li = document.createElement("li"); var textNode = document.createTextNode(keys); li.appendChild(textNode)

我试图创建一个无序的列表菜单,但无法让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");
}

您需要阅读,但以下是答案:

li.onclick = (function (keys) {
    return function () {
        //handler code
        console.log(keys);
    };
})(keys);
更有效的方法是在循环之外创建一个函数,负责生成处理程序

function createClickHandler(keys) {
    return function () {
        //use keys
    };
}
然后在循环中:

li.onclick = createClickHandler(keys);

无需查询
body
,您可以执行
document.body.appendChild()
。我自学了很长一段时间,从来没有想到过,代码要短得多。@RobertPeek您看过我的答案了吗?