Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以像PHP那样自动将表单的输出转换为数组,但使用jQuery/Javascript?_Php_Javascript_Jquery_Html_Forms - Fatal编程技术网

有没有一种方法可以像PHP那样自动将表单的输出转换为数组,但使用jQuery/Javascript?

有没有一种方法可以像PHP那样自动将表单的输出转换为数组,但使用jQuery/Javascript?,php,javascript,jquery,html,forms,Php,Javascript,Jquery,Html,Forms,是否有一种方法可以将字段名使用多维数组表示法的表单的输出转换为该数据的实际关联数组或对象 例如,我有两个字段: <input type="text" name="contract[main][date]" /> <input type="text" name="contract[options][timer]" /> 函数formToArray(表单){ var formArray=新数组(); var formElements=form.find('input[nam

是否有一种方法可以将字段名使用多维数组表示法的表单的输出转换为该数据的实际关联数组或对象

例如,我有两个字段:

<input type="text" name="contract[main][date]" />
<input type="text" name="contract[options][timer]" />
函数formToArray(表单){
var formArray=新数组();
var formElements=form.find('input[name]');
formElements.each(函数(){
var name=$(this.attr('name');
var值=$(this.val();
//将所有出现的']'替换为''
name=name.split(']').join('');
var elements=name.split('[');
var previousRef=形式阵列;
for(var i=0,count=elements.length;i
不完全是。PHP的数组表示法是一种黑客行为,对JS或html没有任何意义。您必须从DOM中提取所有输入字段,解析名称属性,并构建自己的数组。json.stringify/jquery.serialize将采用表单并将其转换为可提交的字符串,但PHP表示法对它们来说完全不透明。它们只需查看一些表单字段名称,而不是数组。如果不使用eval或您自己的自定义字符串解析名称,Jquery可能会有所帮助。serializeArray()是的,但这会为您提供一个类似以下内容的数组:
[{name:'contract[main][date]',value:'input field value}]
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);