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

时间:2014-04-23 18:59:56

标签: javascript

我是 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]" />

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

1 个答案:

答案 0 :(得分:4)

因为函数内部有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++;
    };
})();

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