我有一个带有许多输入字段的表单。
当我用jQuery捕获提交表单事件时,是否有可能在一个关联数组中获得该表单的所有输入字段?
我有一个带有许多输入字段的表单。
当我用jQuery捕获提交表单事件时,是否有可能在一个关联数组中获得该表单的所有输入字段?
当前回答
jquery。表单插件可能会帮助其他人在这个问题上寻找什么。我不确定它是否能直接满足你的要求。
还有serializeArray函数。
其他回答
$('#myForm').submit(function() {
// get all the inputs into an array.
var $inputs = $('#myForm :input');
// not sure if you wanted this, but I thought I'd add it.
// get an associative array of just the values.
var values = {};
$inputs.each(function() {
values[this.name] = $(this).val();
});
});
感谢来自Simon_Weaver的提示,这里有另一种方法,你可以使用serializeArray:
var values = {};
$.each($('#myForm').serializeArray(), function(i, field) {
values[field.name] = field.value;
});
注意,这个代码段在<select multiple>元素时将失败。
在jQuery 1.3版本中,新的HTML 5表单输入不能使用serializeArray。这适用于版本1.4+
我希望这是最简单的方法。
$("#form").submit(function (e) {
e.preventDefault();
input_values = $(this).serializeArray();
});
如果你需要从输入中获取多个值,并且你正在使用[]来定义具有多个值的输入,你可以使用以下方法:
$('#contentform').find('input, textarea, select').each(function(x, field) {
if (field.name) {
if (field.name.indexOf('[]')>0) {
if (!$.isArray(data[field.name])) {
data[field.name]=new Array();
}
data[field.name].push(field.value);
} else {
data[field.name]=field.value;
}
}
});
我也遇到过同样的问题,只是用了不同的方法。
var arr = new Array();
$(':input').each(function() {
arr.push($(this).val());
});
arr;
它返回所有输入字段的值。您可以将$(':input')更改为更具体。
不要忘记复选框和单选按钮-
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