我有一个带有许多输入字段的表单。
当我用jQuery捕获提交表单事件时,是否有可能在一个关联数组中获得该表单的所有输入字段?
我有一个带有许多输入字段的表单。
当我用jQuery捕获提交表单事件时,是否有可能在一个关联数组中获得该表单的所有输入字段?
当前回答
似乎很奇怪,没有人赞成或提出一个简洁的解决方案来获得列表数据。几乎没有任何形式是一维对象。
当然,这种解决方案的缺点是必须在[0]索引处访问单例对象。但在我看来,这比使用12行映射解决方案要好得多。
var formData = $('#formId').serializeArray().reduce(function (obj, item) {
if (obj[item.name] == null) {
obj[item.name] = [];
}
obj[item.name].push(item.value);
return obj;
}, {});
其他回答
有时我发现一次一个更有用。为此,有这个:
var input_name = "firstname";
var input = $("#form_id :input[name='"+input_name+"']");
当我需要对所有表单字段进行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 arr = new Array();
$(':input').each(function() {
arr.push($(this).val());
});
arr;
它返回所有输入字段的值。您可以将$(':input')更改为更具体。
这段代码可以工作 而不是名称,电子邮件输入您的表单字段的名称
$(document).ready(function(){
$("#form_id").submit(function(event){
event.preventDefault();
var name = $("input[name='name']",this).val();
var email = $("input[name='email']",this).val();
});
});
jQuery的serializeArray不包括禁用字段,所以如果你也需要这些,试试:
var data = {};
$('form.my-form').find('input, textarea, select').each(function(i, field) {
data[field.name] = field.value;
});