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

验证Kendo Upload控件:表单提交前需确认上传完成,求替代方案

Kendo Upload 表单提交时的上传状态管控方案

你的初始方案(用变量配合e.preventDefault()拦截提交、追踪上传状态)是完全可行的,这里再分享几个更贴合Kendo Upload组件特性的实现思路,供你参考:

思路一:利用组件内置API直接获取上传状态

Kendo Upload本身提供了getFiles()方法,可直接获取所有文件的实时状态,无需额外维护变量,能避免状态不同步的问题:

$("#submitBtn").on("click", function(e) {
    const upload = $("#files").data("kendoUpload");
    // 筛选出正在上传的文件
    const uploadingFiles = upload.getFiles().filter(file => file.status === "uploading");
    
    if (uploadingFiles.length > 0) {
        e.preventDefault();
        alert("文件正在上传中,请等待完成后再提交表单");
    }
});

思路二:动态禁用/启用提交按钮

从根源上避免误操作:上传开始时禁用提交按钮,所有上传任务完成(或文件被移除后无待上传任务)时再启用按钮:

const upload = $("#files").kendoUpload({
    upload: function() {
        $("#submitBtn").prop("disabled", true);
    },
    complete: function() {
        // 检查是否还有未完成的上传任务
        const hasUploading = this.getFiles().some(file => file.status === "uploading");
        if (!hasUploading) {
            $("#submitBtn").prop("disabled", false);
        }
    },
    remove: function() {
        // 文件被移除后也要检查状态
        const hasUploading = this.getFiles().some(file => file.status === "uploading");
        if (!hasUploading) {
            $("#submitBtn").prop("disabled", false);
        }
    }
}).data("kendoUpload");

思路三:结合Promise机制处理异步上传

如果需要在上传完成后自动触发表单提交,可以把每个上传任务包装成Promise,提交时等待所有任务完成:

let uploadTasks = [];

const upload = $("#files").kendoUpload({
    upload: function(e) {
        // 为每个上传任务创建Promise
        const task = new Promise((resolve, reject) => {
            e.data = { resolve, reject };
        });
        uploadTasks.push(task);
    },
    success: function(e) {
        e.data.resolve();
    },
    error: function(e) {
        e.data.reject();
    },
    complete: function() {
        // 清理已完成的任务
        uploadTasks = uploadTasks.filter(t => t.status !== "fulfilled" && t.status !== "rejected");
    }
}).data("kendoUpload");

$("#submitBtn").on("click", async function(e) {
    if (uploadTasks.length > 0) {
        e.preventDefault();
        alert("文件正在上传中,完成后将自动提交表单");
        // 等待所有上传完成后自动提交
        await Promise.allSettled(uploadTasks);
        $("#yourForm").submit();
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:06:18