我一直在尝试为我通过JS创建的一组复选框添加onclick事件,但未达到我的期望。

在脚本的最后,在“ checkboxes” div中构建了复选框之后,我希望每个框都使用不同的参数i调用处理程序。看来处理程序都在使用i的当前值,实际上是从使用它的位置开始递增的。

我在这里想念什么???

    function initialize() {
        console.log("enter initialize");
        console.log("create checkboxes");
        for ( i=0; i<4; i++){

            var span1 = document.createElement('span');
            span1.innerHTML = i;

            var cb = document.createElement('input');
            cb.type = "checkbox";
            cb.name = i.toString();
            cb.onclick = function(){myFunction(i);}
            console.log(i, cb.name, cb.onclick);

            var checkboxes = document.getElementById("checkboxes");
            checkboxes.appendChild(span1);
            checkboxes.appendChild(cb);
            console.log("cb="+cb.toString());
        }
    }
    function myFunction(b){
        alert(b);

最佳答案

这是人们常见的范围问题。问题在于,创建函数时的“ i”值与调用函数时设置的“ i”值不同,因此每次被调用时的“ i”始终为3。

解决这个问题的最简单方法是,简单地从元素的“ this”中获取值,例如:

cb.onclick = function(){myFunction(this.name);}


如果您不希望它成为字符串名称,则可以像下面这样设置它:

cb.counter = i;
cb.onclick = function(){myFunction(this.counter);}

10-08 00:58