关于javascript:将onllick绑定到循环中的节点

Bind onclick to nodes in a loop

本问题已经有最佳答案,请猛点这里访问。

我有一个函数add_the_handler,它将onclick事件绑定到每个节点。 当我单击任何节点时,以下示例在每个警报窗口中打印"3"

1
2
3
4
5
6
7
8
9
10
var add_the_handlers = function (nodes) {

var i;
    for (i=0; i< nodes.length; i+=1) {

        nodes[i].onclick = function (e) {
            alert(i);    
        };
    }
};

小提琴在这里:http://jsfiddle.net/D886E/3/

为什么节点不在警报窗口中打印不同的值1,2,3?


检查这个小提琴。 基本上你需要一个函数clojure来处理将侦听器附加到循环中的适当索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var add_the_handlers = function (nodes) {

    var i;

    for (i = 0; i < nodes.length; i += 1) {
        (function (i) {
            nodes[i].onclick = function (e) {
                alert(i);
            };

        })(i);
    }
};

pnodes = document.getElementsByClassName("node");

add_the_handlers(pnodes);