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

ASP.NET多表单视图下如何用JavaScript获取输入值提交AJAX请求

问题原因

  • 箭头函数(e) => {}的this指向全局上下文,而非当前点击的提交按钮元素,导致$(this).closest()无法匹配到对应表单
  • 事件绑定逻辑冲突:在按钮点击事件中重复绑定表单的submit事件,会造成单次提交触发多次逻辑的问题
  • jQuery对象与原生DOM方法混用:$form是jQuery封装的对象,无法直接调用原生DOM的addEventListener方法

修复方案

直接监听所有表单的submit事件即可,无需单独绑定按钮点击事件,同时优先通过表单内元素的name属性查找值,不依赖ID拼接规则,稳定性更高:

$(document).on("submit", ".form", function(e) {
    // 阻止默认表单提交跳转
    e.preventDefault();
    const $currentForm = $(this);
    // 获取当前表单ID
    const formId = $currentForm.attr("id");
    // 获取对应输入框值,两种方式可选:
    // 方式1:按原有ID拼接规则获取
    const documentTypeId = $(`#${formId}_documentTypeId`).val();
    // 方式2:直接在当前表单内按name属性查找,无需依赖ID规则,更稳妥
    const accreditationApplicationId = $currentForm.find('input[name="accreditationApplicationId"]').val();
    
    // 提交带文件的表单,直接使用FormData自动收集所有表单数据
    const formData = new FormData(this);
    // 发起AJAX请求
    $.ajax({
        url: $currentForm.attr("action"),
        method: $currentForm.attr("method"),
        data: formData,
        processData: false,
        contentType: false,
        success: function(response) {
            // 上传成功后自定义逻辑,比如刷新文件列表、提示成功
            alert("文件上传成功");
        },
        error: function() {
            alert("文件上传失败,请重试");
        }
    });
});

补充说明

如果你的表单是后续动态加载生成的,用上述的document事件委托写法也能正常适配,不需要重新绑定事件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:36:00