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

jQuery Steps多步骤表单跳过步骤时验证失效问题求助

解决方案

核心思路

要同时满足「隐藏/禁用字段跳过验证」和「所有已访问或跳过步骤中的可见字段必须验证」,需要从跳转时的分段验证和完成时的全量验证两方面调整逻辑,避免遗漏任何可见必填字段。

代码修改实现

1. 新增辅助验证函数

先封装两个通用函数,用来精准验证指定步骤的可见字段:

// 验证单个步骤内的可见必填字段
function validateStep(stepIndex) {
    let isValid = true;
    // 定位到对应步骤的section容器
    const stepSection = formWizard.find('section').eq(stepIndex);
    // 只遍历该步骤内可见、非禁用的必填字段
    stepSection.find(':input[required]:visible:not(:disabled)').each(function() {
        if (!$(this).valid()) {
            isValid = false;
            return false; // 找到第一个无效字段就停止遍历,提升性能
        }
    });
    return isValid;
}

// 验证指定范围的所有步骤
function validateStepsRange(startIndex, endIndex) {
    for (let i = startIndex; i <= endIndex; i++) {
        if (!validateStep(i)) {
            return false;
        }
    }
    return true;
}

2. 修改onStepChanging逻辑

当用户向前跳过多步骤时,额外验证所有中间步骤的可见字段,避免跳过必要验证:

onStepChanging: function (event, currentIndex, newIndex) {
    // 允许向后跳转(无需验证)
    if (currentIndex > newIndex) {
        return true;
    }

    // 保留原有步骤数据保存逻辑
    if (currentIndex < newIndex) {
        switch(currentIndex) {
            case 0:
                ActiveState = 0;
                DPForm.SaveDPFormStep1();
                break;
            case 1:
                ActiveState = 1;
                DPForm.SaveDPFormStep2();
                break;
            case 2:
                ActiveState = 2;
                DPForm.SaveDPFormStep3();
                break;
            case 3:
                ActiveState = 3;
                DPForm.SaveDPFormStep4();
                break;
            case 4:
                ActiveState = 4;
                DPForm.SaveDPFormStep5();
                break;
            case 5:
                ActiveState = 5;
                DPForm.SaveDPFormStep6();
                break;
        }
    }

    // 设置验证忽略规则:跳过禁用和隐藏字段
    formWizard.validate().settings.ignore = ":disabled,:hidden";
    
    // 验证当前步骤 + 所有中间跳过的步骤
    const currentStepValid = formWizard.valid();
    const skippedStepsValid = validateStepsRange(currentIndex + 1, newIndex - 1);
    
    return currentStepValid && skippedStepsValid;
},

3. 修改onFinishing逻辑

表单完成时,强制验证所有7个步骤的可见字段,作为最后一道防线:

onFinishing: function (event, currentIndex) {
    formWizard.validate().settings.ignore = ":disabled,:hidden";
    
    // 验证所有步骤的可见字段 + 当前步骤实时输入内容
    const allStepsValid = validateStepsRange(0, 6);
    const currentStepValid = formWizard.valid();
    
    return allStepsValid && currentStepValid;
},

关键说明

  • 辅助函数只针对单个步骤的可见必填字段验证,不会触发全表单验证,彻底避免对隐藏字段的误验证
  • 向前跳转时的范围验证,确保用户跳过多步骤时,中间步骤的可见必填字段不会被遗漏
  • 完成时的全步骤验证,覆盖所有极端场景(比如用户从步骤1直接跳去完成表单)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:44:53