Javascript 具有Onclick赋值的循环中的闭包

Javascript 具有Onclick赋值的循环中的闭包,javascript,loops,onclick,closures,Javascript,Loops,Onclick,Closures,我正试图创建一个导航栏,它通过一系列“页面”对象循环自动生成。不幸的是,我似乎陷入了循环/关闭陷阱。我读过几个与此相关的线程,在某些情况下,我会复制并粘贴解决方案代码,并传入我自己的变量,但我正在努力使它正确地分配onclicks 我知道我很接近。在下面的代码中,我尝试了两个选项 自我调用函数中括号中的参数有问题吗?-()(divId)?我真的不明白这部分 我是否也会因为这是作为一个对象方法来完成而感到挣扎 非常感谢任何帮助,但请对我宽容一点,我正在业余时间学习这一切!;) 提前谢谢 编辑:Js

我正试图创建一个导航栏,它通过一系列“页面”对象循环自动生成。不幸的是,我似乎陷入了循环/关闭陷阱。我读过几个与此相关的线程,在某些情况下,我会复制并粘贴解决方案代码,并传入我自己的变量,但我正在努力使它正确地分配onclicks

我知道我很接近。在下面的代码中,我尝试了两个选项

自我调用函数中括号中的参数有问题吗?-()(divId)?我真的不明白这部分

我是否也会因为这是作为一个对象方法来完成而感到挣扎

非常感谢任何帮助,但请对我宽容一点,我正在业余时间学习这一切!;)

提前谢谢

编辑:Jsfiddle:

var navBar = {
display: function(){
    for(i=0;i<pages.length;i++){
        document.getElementById('navBar').innerHTML += pages[i].token;
        var divId = pages[i].unique;

// code works fine up to here.
// option one(below): when navBar.display() is called the following code only adds
// the onclick to the final navbar link

        document.getElementById(divId).onclick=(function(divId) { 
                return function() { 
                alert(divId);
            }; 
        })(divId);

//option two(below): when navBar.display() is called the following code logs 
// the individual div id's correctly. But, it does it without being clicked. Then, 
// only the last item in the loop is clickable.

        (function(divId){
                document.getElementById(divId).onclick= function(){
                    console.log(divId);
                }
            }
        )(divId);
    }
}
var导航条={
显示:函数(){

对于(i=0;i我已经让它在这里工作了-它似乎与
i
的绑定无关,您需要首先构建导航html,确保它在绑定事件之前位于DOM中。我放置了两个单独的循环,一个用于生成nav,第二个用于绑定事件。还更新了
页面。display()
要使用
这个
因为它会受到
i
值的影响

有趣的问题,我尝试了各种不同的iLife,每次只有最后一个元素被分配onclick处理程序。非常感谢你的评论-我花了数小时研究这个问题。知道这一点确实很有帮助不仅仅是我。有时候当你在报道新的领域时,很难知道你是否只是在傻!