使用不正确的迭代器值进行事件赋值

时间:2016-02-01 22:25:18

标签: javascript closures

我试图在循环中创建一个闭包,以便用我的迭代器值设置一个事件监听器。但是,未正确设置setCookie中的值。我在这里做错了什么?

obj = document.getElementsByClassName("class");
l = obj.length;
i = 0;

function addEv() { 
    while (i < l) {
        obj[i].addEventListener("click", listener.bind(null, i));
        function listener(index) { 
            setCookie("item", index, 24) 
        }
        i++;
    }
}

1 个答案:

答案 0 :(得分:-1)

更新的答案

捕获迭代值的方法是使用立即调用的函数来捕获闭包中的值。

while (i < l) {
  obj[i].addEventListener("click", (function(index) {
    return function(ev) {
      //setCookie("item", index, 24) 
      console.log(index)
    };
  }(i)));
  i++;
}

此示例将迭代i包装为index