【问题标题】:Counter variable inside function of a loop with onchange [duplicate]带有onchange的循环函数内部的计数器变量[重复]
【发布时间】:2018-08-30 14:29:44
【问题描述】:

您好,这是我创建表的 for 循环。这个表里面有不同的功能。

for (var id_day = 1; id_day < 32; id_day++)
{
    var tr = document.createElement("tr");  

    for (var i = 0; i < 3; i++)
    {
        var td = document.createElement("td");

        if (i == 0)
            td.innerHTML = id_day;
        if (i == 1)
        {
            var element = document.createElement("input");
            element.type = "text";
            element.id = "quantity_delivered_" + id_day;
            element.name = "quantity_delivered";
            element.value = "0.00";
            element.onchange = function(){update_input_detail(this.id, this.value, id_day, id_ddt, id_product);};
            td.appendChild(element);
        }
        if (i == 2)
        {
            var element = document.createElement("input");
            element.type = "text";
            element.id = "quantity_returned_" + id_day;
            element.name = "quantity_returned";
            element.value = "0.00";
            element.onchange = function(){update_input_detail(this.id, this.value, id_day, id_ddt, id_product);};
            td.appendChild(element);
        }

        tr.appendChild(td);
    }

    tbody.appendChild(tr);
}

.onchange 函数内部 id_day 始终是最后一个索引 32,但我需要 id_day 是每个函数的不同数字。

【问题讨论】:

  • 你的问题到底是什么?
  • id_day 变量始终为 32,但我需要 id_day 在 .onchange 中为 1、2、3、4、5 等

标签: javascript php function loops


【解决方案1】:

id_day 始终为 32,因为在调用 onchange 时,循环已完成并设置 id_day++ 32 次。

一个快速的解决方法是将var替换为let

for (let id_day = 1; id_day < 32; id_day++) {

但重构代码以删除内联函数会使其更易于阅读,并且具有使范围更改更清晰的副作用

【讨论】:

    猜你喜欢
    • 2019-06-07
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2015-08-01
    相关资源
    最近更新 更多