You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

页面多表单提交异常:提交非首表单却传递首表单数据

问题分析与解决方案

核心问题

你代码里的$(".expHeadline").val()这类选择器,会直接抓取页面中第一个匹配该类名的元素值——不管是哪个表单触发的提交事件,拿到的都是第一个表单里的输入内容,这就是非首个表单提交数据错误的根源。

修复方案

在表单的submit事件里,先通过$(this)获取当前触发提交的表单对象,再在这个表单范围内查找对应的输入元素,就能拿到当前提交表单的正确数据了。

修改后的完整代码:

$(".mixForm").submit(function (event) {
    event.preventDefault();
    
    // 获取当前提交的表单实例
    var $currentForm = $(this);
    // 仅在当前表单内查找目标输入框
    var headline = $currentForm.find(".expHeadline").val();
    var content = $currentForm.find(".expContent").val();
    var vid = $currentForm.find(".IDv").val();
    
    alert(headline);
 
    // Ajax请求逻辑保持不变
    $.ajax({
        url: ajaxurl,
        method: 'post',
        data: {
            'action': 'enyc_add_exp_row',
            'head' : headline,
            'cont' : content,
            'vid' : vid,
        },
        success:function(data) {
            alert('hi');
            console.log(data);
            $(".response").html(data);
        },
        error: function(errorThrown){
            console.log(errorThrown);
        }
    });  
});

额外优化建议

如果每个表单里的输入元素都有唯一的name属性,可以用serialize()方法一键序列化表单数据,省去逐个取值的麻烦:

$(".mixForm").submit(function (event) {
    event.preventDefault();
    
    // 序列化当前表单的所有数据
    var formData = $(this).serialize();
    // 手动添加action参数(也可以在表单里加隐藏input传递该值)
    formData += '&action=enyc_add_exp_row';
    
    $.ajax({
        url: ajaxurl,
        method: 'post',
        data: formData,
        success:function(data) {
            alert('hi');
            console.log(data);
            $(".response").html(data);
        },
        error: function(errorThrown){
            console.log(errorThrown);
        }
    });  
});

内容的提问来源于stack exchange,提问作者DEM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:02:03