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

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


当前回答

试试下面的代码:

jQuery("#form").serializeArray().filter(obje => 
obje.value!='').map(aobj=>aobj.name+"="+aobj.value).join("&")

其他回答

Serialize()是最好的方法。@ Christopher Parker说,Nickf的回答实现了更多,但它没有考虑到表单可能包含文本区域和选择菜单。最好使用serialize(),然后根据需要对其进行操作。serialize()中的数据可以在Ajax post或get中使用,因此没有任何问题。

当我需要对所有表单字段进行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网站上定制产品选项时使用了这个选项,包括复选框和文本字段以及标准的选择框类型。

$('#myForm').bind('submit', function () {
  var elements = this.elements;
});

elements变量将包含表单中的所有输入、选择、文本区域和字段集。

所有答案都很好,但如果函数中有一个字段你想忽略?简单,给字段一个属性,例如ignore_this:

<input type="text" name="some_name" ignore_this>

在你的Serialize函数中:

if(!$(name).prop('ignorar')){
   do_your_thing;
}

这是忽略某些字段的方法。

不要忘记复选框和单选按钮-

var inputs = $("#myForm :input");
var obj = $.map(inputs, function(n, i) {
  var o = {};
  if (n.type == "radio" || n.type == "checkbox")
    o[n.id] = $(n).attr("checked");
  else
    o[n.id] = $(n).val();
  return o;
});
return obj