php - 有没有办法像 PHP 一样自动将表单的输出转换为数组,但使用 jQuery/Javascript?

标签 php javascript jquery html forms

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

例如,我有两个字段:

<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'
    }
};

最佳答案

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);

关于php - 有没有办法像 PHP 一样自动将表单的输出转换为数组,但使用 jQuery/Javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15794045/

相关文章:

javascript - 如何通过单击 v-list 项 vue + vuetify 来选择 v-radio

javascript - jQuery 焦点不工作

php - PHP 中的骰子滚动程序

php - 将数组传递到 View 中(codeigniter)

php - iconv() : Detected an incomplete multibyte character in input string

javascript - Bootstrap 词缀重置不起作用

javascript - jQuery 错误 : too much recursion

php - mysql连接两个不同的表

javascript - jquery 的问题

javascript - 如何创建包含异步调用的 Javascript (es5) 构造函数