我一整天都在寻找这个概念的答案,最后放弃了,决定在这里问一下。
以下是这个概念:
我有一组排列的字段,我希望这组字段位于数组内部,以便我可以使用标准函数根据所涉及的字段保存模块,并使用另一个参数来检查要保存的内容。
示例代码:
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>
所以,有评论的那部分是我无法理解该怎么做的事情,我尝试使用getElementById
,getElementsByName
,但它无效。
或者我是否有可能将这样的元素数组传递给函数?{/ 1}}?
编辑:我添加了一个while循环语句,使概念更加全面。
答案 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中,有多个具有唯一名称的字段。