jquery 将多个窗体序列化在一起?

9avjhtql  于 2023-03-29  发布在  jQuery
关注(0)|答案(5)|浏览(99)

你能把多个表单序列化成一个表单,这样就只需要一个post或 AJAX 请求了吗?我到处找了找,都是通过post/ajax提交每个表单的。

xu3bshqb

xu3bshqb1#

如果你在一个有多个表单的页面上运行$('form').serialize(),它会正确地将所有表单序列化为一个字符串。
若要仅包括某些表单,请使用$('#form1, #form2').serialize()

nhaq1z21

nhaq1z212#

当使用jQuery serialize()函数时,它只是将表单转换为a=1&b=2&c=3的字符串。因此,您当然可以将此函数应用于两个表单并将结果连接起来,在它们之间使用&,并 AJAX 调用中使用结果。您需要进行一些检查,以确保在进行连接时字符串都不是空的。

disho6za

disho6za3#

我喜欢上面Jleagle的答案。
如果您对表单有更详细的了解,请使用

$('#detailsform,#levelForm').serialize();

上面一行将返回一个字符串值,如customId=08071992&cort=01&empId=7777

您可以通过在输入字段中添加属性disabled="disabled"来避免不需要的字段,或者换句话说,“禁用”字段不会被序列化。

dfty9e19

dfty9e194#

对我来说,解决方案是:

$('#firstForm').append($('#secondForm').children());
$('#firstForm').submit();

在我的例子中,结果是一个GET查询,两种形式都在一个查询字符串中。

2ekbmq32

2ekbmq325#

function mergeAndSerialize(f1, f2) {
    let d1 = $(f1).serializeArray(), d2 = $(f2).serializeArray();
    d2.forEach(f => !d1.some(o => o.name === f.name) && d1.push(f));
    return $.param(d1);
}

相关问题