Javascript绑定循环中的单击处理程序

时间:2013-07-07 22:40:50

标签: javascript events

我正在尝试创建多个链接,并在循环内将onclick handller绑定到它们。单击链接时,我想显示一个警告框,指示链接编号(第一个链接为1,第二个链接为2,第二个链接为3,依此类推)。

<html>
<body>
</body>
</html>

<script type = 'text/javascript'>
for (var i = 0; i < 10; i++) {
    var link = document.createElement("a");
    link.innerHTML = "Link " + i;
    link.href = '#';
    link.onclick = function () {
        alert("This is the link " + i);
        return false;
    };
    document.body.appendChild(link);
}
</script>

出于某种原因,当我点击任何链接时,我会收到相同的警告消息“这是链接10”。

可能是因为只有在调用函数时,alert函数的参数才会被绑定?因为在循环结束后,i的值最终为10。

1 个答案:

答案 0 :(得分:2)

简单回答,使用closure

link.onclick = (function(j) {
    return function(){
        alert ("This is the link " + j);
        return false;
    }
})(i);