javascript - 事件中的变量

标签 javascript events variables for-loop

我得到了这个代码:

<script>window.onload = function () {
    var container, i;

    for (i = 0; i < 10; i ++) {
        container = document.createElement ("div");
            container.innerHTML = i;

            container.style.border = "1px solid black";
            container.style.padding = "10px";

            container.onclick = function () {
                alert (i);
            }

        document.body.appendChild (container);
    }
}</script>

只是想知道为什么当我点击元素时我得到了错误的数字:(

谢谢

最佳答案

这是匿名函数的经典作用域问题。

函数中的变量 i 对于您添加的每个事件处理程序都是相同的 - 因此它们都会发出相同的警报值。

您想为每个变量创建一个新范围:类似于:

function createAlertFunction(i) {
    return function() {
        alert(i);
    }
}

//...

container.onclick = createAlertFunction(i);

关于javascript - 事件中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1949590/

相关文章:

javascript - 同时移动所有节点(包括链接)?

javascript - 如何在回调中访问正确的“this”?

asp.net - 数据绑定(bind)列表框和设置 css 类

javascript - 在 Javascript 中精确模拟用户的按键

PHP - 从 POST 变量中删除撇号

jquery - 使用 javascript 组合两个变量以将新变量设置为已声明的变量

javascript - 对两个 Highcharts 饼图使用连接图例

javascript - 如何使用 select2 或任何其他 js 在 select 中搜索选项值

没有参数的 C# 事件。我该如何处理它们?

java - 我应该在循环中重新定义或重新分配变量吗?