添加到javascript中具有指定索引的数组

添加到javascript中具有指定索引的数组,javascript,Javascript,我是javascript新手,我创建了两个函数,createInput(),它在调用时创建带有名称参数的输入框,并将它们附加到标记,newTwo()它使用两个不同的名称调用createInput()两次 我似乎无法为两个name元素提供索引,并使其在每次调用newTwo()时递增。我需要这个,这样我就可以成对地跟踪字段值 function createInput(name) { var input = document.createElement("input"); inp

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

我似乎无法为两个name元素提供索引,并使其在每次调用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]" />


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

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

var $i = 0;
function newTwo()
{
    createInput("first_name[" + $i + "]");
    createInput("last_name[" + $i + "]");
    $i++;
}
或者,如果您真的想避免将
$i
设置为全局,您可以在其周围创建一个如下的

var newTwo = (function() {
    var $i = 0;
    return function() {
        createInput("first_name[" + $i + "]");
        createInput("last_name[" + $i + "]");
        $i++;
    };
})();
请注意,此版本与以前的版本之间存在细微差异。有关更多详细信息,请参见以下问题:


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

var $i = 0;
function newTwo()
{
    createInput("first_name[" + $i + "]");
    createInput("last_name[" + $i + "]");
    $i++;
}
或者,如果您真的想避免将
$i
设置为全局,您可以在其周围创建一个如下的

var newTwo = (function() {
    var $i = 0;
    return function() {
        createInput("first_name[" + $i + "]");
        createInput("last_name[" + $i + "]");
        $i++;
    };
})();
请注意,此版本与以前的版本之间存在细微差异。有关更多详细信息,请参见以下问题:


很好地描述了询问者出现问题的原因和解决方法@塞西林对不起,我应该说得更清楚些。两者都是闭包,但第二个变量也有一个IIFE。为了清楚起见,我已经更新了。很高兴我能帮上忙:)谢谢,从我到目前为止读到的关于JS的内容来看,避免使用globals似乎是最好的方法。很好地描述了询问者为什么会遇到这个问题以及如何解决它@塞西林对不起,我应该说得更清楚些。两者都是闭包,但第二个变量也有一个IIFE。为了清楚起见,我已经更新了。很高兴我能帮上忙:)谢谢,从我所读到的关于JS的资料来看,避免使用globals似乎是最好的方法。