将数组元素数组传递给函数

时间:2014-10-27 09:02:25

标签: javascript php html

我一整天都在寻找这个概念的答案,最后放弃了,决定在这里问一下。

以下是这个概念:

我有一组排列的字段,我希望这组字段位于数组内部,以便我可以使用标准函数根据所涉及的字段保存模块,并使用另一个参数来检查要保存的内容。

示例代码:

module1.php

<?php
$i=0;
while($i<5){
?>
<input type="text" name="field1[$i]" />
<input type="text" name="field2[$i]" />
<input type="text" name="field3[$i]" />
<?php
$i++;
}
?>
<input type="button" name="process"
onclick="checkFields(['field1', 'field2', 'field3'], 'module1');" />
<script>
    function checkFields(f, m){
        var fn = f.length;
        alert(fn); //Output is 3
        for(i=0; i<fn; i++){
            var nfn = f[i].length; //Here's where it's not working
            alert(nfn); //Output should be 5
        }
    }
</script>

所以,有评论的那部分是我无法理解该怎么做的事情,我尝试使用getElementByIdgetElementsByName,但它无效。

或者我是否有可能将这样的元素数组传递给函数?{/ 1}}?

编辑:我添加了一个while循环语句,使概念更加全面。

3 个答案:

答案 0 :(得分:0)

<script>
    function checkFields(f, m){
        var fn = f.length;
        alert(fn);
        for(i=0; i<=fn; i++){
            var nfn = f[i].length; //Here's where it's not working
            alert(nfn);
        }
    }
</script>

你应该在f参数上应用索引器,而不是整数的fn变量。

答案 1 :(得分:0)

fn是数组的长度,而不是数组的长度。您应该使用f

更改...

var nfn = fn[i].length; //Here's where it's not working

要...

var nfn = f[i];

此外,您会发现for循环失败,因为i将达到fn,但数组会停在fn-1

所以改变......

for(i=0; i<=fn; i++){

要...

for(i=0; i<fn; i++){

答案 2 :(得分:0)

f [i]仍指向不正确的输入名称。您无法真正访问输入字段。

这样做:

var inputName = f[i] + "[]";//remember the input name is field1[] and not field1.
var value = document.querySelector( "input[name='"+inputName+"']" ).value;

这里的值只是输入字段的输入文本而不是数组。如果您有多个具有相同名称的字段,则使用document.querySelectorAll方法获取所有输入字段,然后迭代以逐个获取值。


为了帮助您更好地理解,请考虑以下两个选项:

选项1:

HTML:

<input name="field1[]" />
<input name="field1[]" />

访问值:

var inputFields = document.querySelectorAll("input[name='field1[]']");
var values = [];
for (var j = 0; j < inputFields.length; j++) {
    var val = inputFields[i].value;
    values.push(val);
}

选项2:

HTML:

<input name="field1[0]" />
<input name="field1[1]" />

访问值:

var values = [];
var j = 0;
var inputField;
while (true) {
    var inputField = document.querySelector("input[name='field1[" + j + "]']");
    if (!inputField) break;
    values.push(inputField.value);
    j++;
}

请注意,在选项1中,有多个字段具有相同的&#34; name&#34;在选项2中,有多个具有唯一名称的字段。