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

jQuery对话框上传按钮点击后文件上传数量递增问题求助

问题原因分析

你遇到的上传次数递增问题,核心原因是事件绑定重复叠加:
每次点击按钮调用gpa_pl_upd_photo_upload()函数时,都会给#gpa_pl_upd_photo这个文件输入框绑定一个新的change事件处理器。当用户选择文件触发change事件时,所有之前绑定的事件都会依次执行,所以第一次点击后触发1次上传,第二次点击后触发2次,以此类推。

解决方案

下面提供三种可行的修复方式,任选其一即可:

方式1:将事件绑定移到函数外部(推荐)

把change事件的绑定逻辑放在函数外面,确保只绑定一次:

// 页面加载完成后只绑定一次change事件
$(function() {
  $("#gpa_pl_upd_photo").change(function(e) {
    alert('gpa_pl_upd_photo_upload');

    var varPic = $('#gpa_pl_upd_photo')[0].files[0];
    var varExistingPhotoID = $("#gpa_pl_upd_photoid").val();

    var formData = new FormData();
    formData.append('photo', varPic);
    formData.append('existing_pic', varExistingPhotoID);

    $.ajax({
      type: "POST",
      url: "php/gpa_pl_upd_photo_upload.php",
      data: formData,
      dataType: 'json',
      cache: false,
      contentType: false,
      processData: false,
      success: function(data, status, xhr) {
        // 原有的成功逻辑
      }
    });
  });
});

// 按钮点击只负责触发文件选择框
function gpa_pl_upd_photo_upload() {
  $("#gpa_pl_upd_photo").trigger('click');
}

方式2:绑定事件前先解绑

在每次绑定change事件前,先移除之前的事件绑定,避免叠加:

function gpa_pl_upd_photo_upload() {
  $("#gpa_pl_upd_photo").trigger('click');
  // 先解绑所有change事件,再绑定新的
  $("#gpa_pl_upd_photo").off('change').on('change', function(e) {
    alert('gpa_pl_upd_photo_upload');

    var varPic = $('#gpa_pl_upd_photo')[0].files[0];
    var varExistingPhotoID = $("#gpa_pl_upd_photoid").val();

    var formData = new FormData();
    formData.append('photo', varPic);
    formData.append('existing_pic', varExistingPhotoID);

    $.ajax({
      type: "POST",
      url: "php/gpa_pl_upd_photo_upload.php",
      data: formData,
      dataType: 'json',
      cache: false,
      contentType: false,
      processData: false,
      success: function(data, status, xhr) {
        // 原有的成功逻辑
      }
    });
  });
}

方式3:使用.one()绑定单次事件

利用jQuery的.one()方法,让事件只执行一次,每次点击按钮时重新绑定:

function gpa_pl_upd_photo_upload() {
  $("#gpa_pl_upd_photo").trigger('click');
  // 使用.one(),确保每个change事件只执行一次
  $("#gpa_pl_upd_photo").one('change', function(e) {
    alert('gpa_pl_upd_photo_upload');

    var varPic = $('#gpa_pl_upd_photo')[0].files[0];
    var varExistingPhotoID = $("#gpa_pl_upd_photoid").val();

    var formData = new FormData();
    formData.append('photo', varPic);
    formData.append('existing_pic', varExistingPhotoID);

    $.ajax({
      type: "POST",
      url: "php/gpa_pl_upd_photo_upload.php",
      data: formData,
      dataType: 'json',
      cache: false,
      contentType: false,
      processData: false,
      success: function(data, status, xhr) {
        // 原有的成功逻辑
      }
    });
  });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:25:21