0

我目前正在将手风琴中的用户输入保存到数组中。

我的 Accordion 是动态的,单击时会创建另一个带有输入字段的手风琴列:

var i = 1 ;
        function AddPanel()
        {
        $('.accord').append('<h3 style="background:none;background-color:#C8C8C8  ;">Job Nr.'+i+'</h3>'
            +'<div style="background:none;background-color:#E0E0E0;">'
                +'<div>'
                    +'<form name="myForm">'
                        +'<table class="wrapper">'
                            +'<tr>'
                                +'<td style="text-align: left">First Digit:'
                                +'<div> <input type="text" name="Job['+i+'][0]" /></td>'
                                +'<td style="text-align: left">System:'      
                                +'<div> <input  type="text" name="Job['+i+'][1]" /></td>'
                                +'<td style="text-align: left">SAP Modul:'  
                                +'<div> <input  type="text" name="Job['+i+'][2]" /></td>'
                            +'</tr>'
                            +'<tr>'
                                +'<td style="text-align: left">Country:' 
                                +'<div> <input  type="text" name="Job['+i+'][3]" /></td>'
                                +'<td style="text-align: left">Duration:' 
                                +'<div> <input  type="text" name="Job['+i+'][4]" /></td>'
                                +'<td style="text-align: left">Step Number:' 
                                +'<div> <input  type="text" name="Job['+i+'][5]" /></td>'
                            +'</tr>'
                            +'<tr>'
                                +'<td style="text-align: left">Optional Text:'
                                    +'<div>' 
                                    +'<textarea align="left" name="Job['+i+'][6]" cols="20" rows="2"></textarea>'
                                    +'</div>'
                                +'</td>'
                            +'</tr>'
                        +'</table>'
                    +'</form>'
                +'</div>'
            +'</div>')
        $('.accord').accordion("refresh"); 
        i++;
        }           

理论上,用户能够动态地将数百个输入输入到二维数组中。

我现在的问题是:我如何能够在一个循环中存储并稍后检索二维数组的所有输入?

我试过撒谎它是由 tborychowski 建议的:`

        var form = document.getElementsByName('myForm');
        field = form.elements['Job[0][0]'];
        formData = [], i = 0, j = 0;

        while (field) {
        formData[i] = [];
        j = 0;
        while (field) {
        formData[i].push(field.value);
        field = form.elements['Job[' + i + '][' + (++j) + ']'];
        }
        field = form.elements['Job[' + (++i) + '][0]'];
        }
        console.dir(formData);
        `

我用很多不同的方式尝试了这个,并在谷歌上搜索了几个小时,但我无法让它工作。

对不起,我是一个真正的初学者。

提前致谢!

4

2 回答 2

0

我创建了一个演示(一个示例)来说明您可以做什么。基本思想(如果我理解正确的话)是使用循环索引命名表单字段,如下所示:

<input type="text" name="Job[0][0]"/>
<input type="text" name="Job[0][1]"/>

所以第一个数字是组/集索引,第二个是该组/集中的字段索引。

比-您只需要遍历这些字段,并且无论集合中有多少个集合或字段-您都可以收集数组中的所有值,例如:

var form = document.getElementById('myForm'),
    field = form.elements['Job[0][0]'],
    formData = [], i = 0, j = 0;

while (field) {
    formData[i] = [];
    j = 0;
    while (field) {
        formData[i].push(field.value);
        field = form.elements['Job[' + i + '][' + (++j) + ']'];
    }
    field = form.elements['Job[' + (++i) + '][0]'];
}

console.dir(formData);

我在这里没有使用 jquery(使用 jquery 可能会更容易)。

这是你想要的?

演示

于 2013-07-26T08:29:28.927 回答
0

根据您的范围,您可以执行以下操作:

var a0 = 6, a1 = 5, a2 = 4, a3 = 2;

for (var i = 0; i < 4; i++) {
   console.log(window['a' + i]);
}

所以 - 如果window是你的变量所在的范围,你可以像上面的例子一样使用它。

否则 - 如果这不可能 - 您可以创建一个值数组而不是单独的变量,如下所示:

'<input  type="text" name="Job['+i+'][]" />'

如果你选择这种方法 - 我要做的是添加一个索引类(为了让 jquery 更容易,到包装器元素(包含相同索引的所有输入),例如:

'<table class="inputs' + i + '">'+
   ---- inputs go here ----
'</table>'+

然后遍历它们并获取值,如下所示:

var jobs = [], idx = 0, inputs = $('.inputs' + idx);

while (inputs.length) {
    inputs.find('input[name^=Job]').function(index, inputField) {
        jobs[idx][].push($(inputField).val());
    });

    idx++;
    inputs = $('.inputs' + idx);
}
于 2013-07-25T08:56:56.343 回答