Javascript 将onclick绑定到循环中的节点

Javascript 将onclick绑定到循环中的节点,javascript,Javascript,我有一个将onclick事件绑定到每个节点的函数add\u处理程序。以下示例在单击任何节点时,在每个警报窗口中打印“3”: var add_the_handlers = function (nodes) { var i; for (i=0; i< nodes.length; i+=1) { nodes[i].onclick = function (e) { alert(i); }; } }; var ad

我有一个将onclick事件绑定到每个节点的函数add\u处理程序。以下示例在单击任何节点时,在每个警报窗口中打印
“3”

var add_the_handlers = function (nodes) {

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

        nodes[i].onclick = function (e) {
            alert(i);    
        };
    }
};
var add\u\u处理器=函数(节点){
var i;
对于(i=0;i
小提琴在这里:

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

检查此项。基本上,您需要一个函数clojure来处理将侦听器附加到循环中适当的索引

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);
var add\u\u处理器=函数(节点){
var i;
对于(i=0;i