多维表单数组到JavaScript对象

时间:2012-11-09 09:36:49

标签: javascript jquery json forms underscore.js

我正在开发一个需要输入数据行的Backbone应用程序(读取:一个对象数组)。

我的表格如下:

<tr>
    <td><input type="text" name="items[][qty]"></td>
    <td><input type="text" name="items[][job_number]"></td>
    <td><input type="text" name="items[][description]"></td>
    <td><input type="text" name="items[][purchase_order]"></td>
</tr>
[...]

具有动态行数。

我希望能够以下列形式检索数据:

{
    items: [
        {
            qty: [val],
            job_number: [val],
            description: [val],
            purchase_order: [val]
        },
        [...]
    ]
}

我找到的最接近的解决方案是Aaron Shafovaloff,但它不支持输出中的数组(仅限对象)。我可以修改他的代码来做我需要的但是我想我先问这里因为重新发明轮子没有意义。

我在项目中使用jQuery和Underscore,因此可以访问他们的方法。

2 个答案:

答案 0 :(得分:2)

检查https://github.com/serbanghita/formToObject

var myFormObj = new formToObject('myFormId');
// console.log(myFormObj);

答案 1 :(得分:1)

我采用这种方式来获取多行文本框:

    aItems = new Array();
    $("table tbody tr").each(function(){
        var $this = $(this);

        aItems.push({
            qty:$this.find('input[name="qty"]').val(),
            job_number: $this.find('input[name="job_number"]').val(),
            description:$this.find('input[name="description"]').val(),
            purchase_order:$this.find('input[name="purchase_order"]').val()
        });

    });

怎么样:

    aItems = new Array();
    $("table tbody tr").each(function(){
        var items = {};

        $(this).find('input').each(function(){
            items[$(this).attr('name')] = $(this).val();
        }
        aItems.push(items);

    });