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

文件上传进度条达100%后点击保存弹窗不显示问题求助

问题排查

1. 核心逻辑缺陷

你当前的makeProgress函数仅在i < 100时执行内部逻辑,每次调用i仅累加1。如果没有外部循环/递归调用这个函数的逻辑,需要主动调用100次才能让i达到100触发弹窗,调用次数不够的话永远走不到弹窗分支。

2. 上传完成条件写死

你用fileno == 9作为全部文件上传完成的判断依据,相当于默认总文件数是10。如果实际上传的文件数量不等于10,这个条件永远不会成立,后续弹窗逻辑自然不会执行。

3. 变量作用域风险

代码中没有展示i的定义位置,如果i是全局变量,多个上传任务共享i会导致计数混乱,可能出现i还没累加到100就被其他任务重置的情况。

4. 框架上下文兼容问题

你用了AngularJS的factory服务,直接使用原生setTimeout不会触发Angular的脏检查,虽然不会影响alert弹出,但后续的$window.location.href跳转可能存在上下文失效的问题。

修复代码示例

// 将i改为factory内部私有变量,避免全局污染
let i = 0;
factory.makeProgress = function(id, fileno, totalFiles) {
  if (i < 100) {
    i = i + 1;
    $(id).css("width", i + "%").text(i + "%");
    console.log("Run makeprogress", fileno);
    // 把固定的fileno==9改为动态判断是否为最后一个文件
    if (fileno === totalFiles - 1) {
      if (i === 100) {
        console.log("i must be 100:", i);
        // 用Angular内置的$timeout替代原生setTimeout,保证上下文正确,记得先注入$timeout依赖
        $timeout(function() {
          alert("应用已成功提交");
          $window.location.href = "application";
          // 进度完成后重置i,方便下次上传使用
          i = 0;
        }, 1000);
        // 达到100后终止递归
        return;
      }
    }
    // 新增递归调用逻辑,自动累加进度,间隔时间可根据实际需求调整
    setTimeout(() => {
      factory.makeProgress(id, fileno, totalFiles);
    }, 10);
  }
}

优化建议

建议把进度条的累加逻辑和实际文件上传进度绑定,不要用固定速率累加的方式,避免出现文件上传完成但进度条还没走完,或者进度条走完了文件还没上传完成的不一致问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:15:04