我有一个带有许多输入字段的表单。

当我用jQuery捕获提交表单事件时,是否有可能在一个关联数组中获得该表单的所有输入字段?


当前回答

受到Lance Rushing和Simon_Weaver回答的启发,这是我最喜欢的解决方案。

$('#myForm').submit( function( event ) {
    var values = $(this).serializeArray();
    // In my case, I need to fetch these data before custom actions
    event.preventDefault();
});

输出是一个对象数组,例如。

[{name: "start-time", value: "11:01"}, {name: "end-time", value: "11:11"}]

使用下面的代码,

var inputs = {};
$.each(values, function(k, v){
    inputs[v.name]= v.value;
});

它的最终输出将是

{"start-time":"11:01", "end-time":"11:01"}

其他回答

我希望这是最简单的方法。

 $("#form").submit(function (e) { 
    e.preventDefault();
    input_values =  $(this).serializeArray();
  });

我也遇到过同样的问题,只是用了不同的方法。

var arr = new Array();
$(':input').each(function() {
 arr.push($(this).val());
});
arr;

它返回所有输入字段的值。您可以将$(':input')更改为更具体。

$("#form-id").submit(function (e) { 
  e.preventDefault();
  inputs={};
  input_serialized =  $(this).serializeArray();
  input_serialized.forEach(field => {
    inputs[field.name] = field.value;
  })
  console.log(inputs)
});

当我需要对所有表单字段进行ajax调用时,我遇到了:input选择器返回所有复选框的问题,无论它们是否被选中。我添加了一个新的选择器来获得可提交的表单元素:

$.extend($.expr[':'],{
    submitable: function(a){
        if($(a).is(':checkbox:not(:checked)'))
        {
            return false;
        }
        else if($(a).is(':input'))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
});

用法:

$('#form_id :submitable');

我还没有测试它与多个选择框虽然,但它的工作,以标准提交的方式得到所有的表单字段。

我在OpenCart网站上定制产品选项时使用了这个选项,包括复选框和文本字段以及标准的选择框类型。

有时我发现一次一个更有用。为此,有这个:

var input_name = "firstname";
var input = $("#form_id :input[name='"+input_name+"']");