【问题标题】:Adding to array with specified index in javascript在javascript中添加到具有指定索引的数组
【发布时间】:2014-04-24 03:18:49
【问题描述】:

我是 javascript 的新手,我创建了 2 个函数,createInput() 在调用时创建带有 name 参数的输入框将它们附加到 标记 newTwo() 上,它使用两个不同的名称调用 createInput() 两次。

我似乎无法为两个名称元素提供索引,并使其在每次调用 newTwo() 时递增。我需要这个,以便我可以将字段值作为一对跟踪。

function createInput(name) 
{

    var input = document.createElement("input");

    input.setAttribute("type", "text");
    input.setAttribute("name", name);

    var form = document.getElementById("foobar");

    form.appendChild(input);

}

function newTwo()
{
    var $i = 0;
    createInput("first_name[" + $i + "]");
    createInput("last_name[" + $i + "]");
    $i++;
}

当我调用 newTwo() 时,将使用数组索引创建输入字段,如下所示。

<input type="text" name="first_name[0]" />
<input type="text" name="last_name[0]" />

如果我再次调用它,接下来的两个字段将是

<input type="text" name="first_name[0]" />
<input type="text" name="last_name[0]" />

我想要的前第二次调用的输出是

<input type="text" name="first_name[1]" />
<input type="text" name="last_name[1]" />

有什么建议吗?提前致谢。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    因为函数中有var $i = 0;,所以每次运行函数时都会创建一个新变量并将其初始化为0。如果要使用在函数调用之间保持其值的变量,则需要在函数外部声明它。例如:

    var $i = 0;
    function newTwo()
    {
        createInput("first_name[" + $i + "]");
        createInput("last_name[" + $i + "]");
        $i++;
    }
    

    或者,如果您真的想避免将$i 设为全局,您可以像这样围绕它创建一个IIFE

    var newTwo = (function() {
        var $i = 0;
        return function() {
            createInput("first_name[" + $i + "]");
            createInput("last_name[" + $i + "]");
            $i++;
        };
    })();
    

    请注意,此版本与以前的版本之间存在细微差别。有关详细信息,请参阅以下问题:

    【讨论】:

    • 很好地描述了提问者为什么会遇到问题以及如何解决它!
    • @cecilli0n 对不起,我应该更清楚。 Both 都是闭包,但第二个在变量周围也有一个 IIFE。为了清楚起见,我已经更新了。很高兴我能帮忙:)
    • 谢谢,从我目前所读到的关于 JS 的内容来看,避免全局变量似乎是最好的方法。
    猜你喜欢
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    相关资源
    最近更新 更多