1

我有没有办法将使用多维数组表示法作为其字段名称的表单的输出转换为实际的关联数组或该数据的对象?

例如,我有两个字段:

<input type="text" name="contract[main][date]" />
<input type="text" name="contract[options][timer]" />

我想阻止表单的默认操作(我知道该怎么做),然后将表单中的所有输入转换为一个对象或关联数组,该数组模仿 PHP 的 $_GET 中可用的关联数组的结构或 $_POST 变量,如果我试图在服务器端执行此操作。就像是:

var contract = {
    main: {
        date:'input field value'
    },
    options: {
        timer:'another input field value'
    }
};
4

1 回答 1

0
function formToArray(form) {
    var formArray = new Array();
    var formElements = form.find('input[name]');

    formElements.each(function() {
        var name = $(this).attr('name');
        var value = $(this).val();

        // replace all occurrences of ']' with ''
        name = name.split(']').join('');

        var elements = name.split('[');
        var previousRef = formArray;

        for(var i = 0, count = elements.length; i < count; i++) {
            var key = elements[i];

            if (!previousRef[key]) {
                previousRef[key] = new Array();
            }

            if (i != elements.length - 1) {
                previousRef = previousRef[key];
            } else if (i == elements.length - 1) {
                previousRef[key] = value;
            }
        }
    });

    return formArray;
}

var form = $('#my_form');
var formArray = formToArray(form);
于 2013-10-29T14:42:46.110 回答