单按钮提交多表单时class选择器失效,电商购物车数量联动功能异常
问题根因
- 附加品表单ID拼写错误:你的附加品表单实际ID为
updateQtyCForm,代码中写为#updateCQtyForm,顺序颠倒导致无法正确获取附加品表单数据。 - 类选择器序列化逻辑错误:当使用
$(".updateQtyForm")选中多个主商品表单时,直接调用.serialize()只会序列化第一个匹配到的表单,其余主商品的表单数据都不会被提交,这是多商品场景失效的核心原因。 - 未绑定当前点击的表单:点击某一款主商品的提交按钮时,你没有关联到当前操作的主商品表单,默认取所有表单自然不符合预期。
修复方案
场景1:点击某款主商品的更新按钮,仅提交当前主商品+附加品表单
$(".submitBtn").click(function(e) { e.preventDefault(); // 先获取当前点击按钮所属的主商品表单 const currentMainForm = $(this).closest(".updateQtyForm"); // 修正附加品表单ID拼写 $.post($("#updateQtyCForm").attr("action"), $("#updateQtyCForm").serialize(), function() { // 仅提交当前操作的主商品表单 $.post(currentMainForm.attr("action"), currentMainForm.serialize(), function() { window.location.href = "/basket.html"; }); }); });
场景2:点击任意主商品更新按钮,提交所有主商品+附加品表单
$(".submitBtn").click(function(e) { e.preventDefault(); // 序列化所有主商品表单,拼接所有表单数据 const allMainFormData = $(".updateQtyForm").map(function() { return $(this).serialize(); }).get().join('&'); $.post($("#updateQtyCForm").attr("action"), $("#updateQtyCForm").serialize(), function() { // 提交拼接好的所有主商品表单数据 $.post("/basket.html", allMainFormData, function() { window.location.href = "/basket.html"; }); }); });
内容的提问来源于stack exchange,提问作者HeatherWebDev
相关产品推荐
相关产品推荐

