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

使用jQuery实现单选框关联表单校验通过后启用提交按钮

修正后可直接运行的完整代码

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input type="radio" name="myfield" value="Field_One" checked="true" /> Field_One
<input type="radio" name="myfield" value="Field_Two" /> Field_Two
<br><br>
<select name="country" id="country">
<option value="">Select</option>
<option value="us">US</option>
<option value="uk">UK</option>
<option value="za">Africa</option>
</select>
<br><br>
<select name="country2" id="country2">
<option value="">Select</option>
<option value="eg">Egypt</option>
<option value="ng">Nigeria</option>
<option value="gh">Ghana</option>
<option value="za">South Africa</option>
</select>
<br><br>
<input type="text" name="first_name" placeholder="First Name" />
<br><br>
<input type="text" name="last_name" placeholder="Last Name"/>
<br><br>
<div class="Field_One">
<input type="text" name="mobile_no" placeholder="Mobile no"/>
<br><br>
<input type="text" name="email" placeholder="Email"/>
</div>
<br>
<div class="Field_Two">
    <input type="text" name="reference_no" placeholder="Reference no" /><br><br>
    <input type="text" name="id_no" placeholder="ID no" />
</div>
<br>
<input type="text" name="trxid" placeholder="Trans ID" />
<input type="submit" id="button1" value="Submit" disabled/>
$(document).ready(function () {
    // 初始化字段状态
    toggleFields($('input[name="myfield"]:checked'));
    updateRequired();
    validation();

    // 单选切换事件绑定
    $('input[name="myfield"]').on('change', function () {
        toggleFields($(this));
        updateRequired();
        validation();
    });

    // 国家选择变化事件绑定
    $("#country").change(function(){
        const optionValue = $(this).val();
        optionValue == 'za' ? $("#country2").show() : $("#country2").hide();
        updateRequired();
        validation();
    }).change();

    // 所有输入/选择操作触发实时校验
    $('input, select').on('input change keyup', function () {
        validation();
    });

    // 字段显隐逻辑
    function toggleFields(radioEl) {
        const val = radioEl.val();
        if (val == "Field_One") {
            $(".Field_One").show();
            $(".Field_Two").hide();
            $("#country, [name='first_name'], [name='last_name']").show();
        } else if (val == "Field_Two") {
            $(".Field_Two").show();
            $(".Field_One").hide();
            $("#country, [name='first_name'], [name='last_name'], #country2").hide();
        }
    }

    // 动态更新必填属性
    function updateRequired() {
        // 先清空所有已有必填属性
        $('[required]').removeAttr('required');
        const activeRadio = $('input[name="myfield"]:checked').val();
        
        // 通用必填项配置
        $('[name="trxid"], [name="first_name"], [name="last_name"]').attr('required', true);

        if(activeRadio === 'Field_One') {
            $('#country, [name="email"]').attr('required', true);
            // 选中非洲时二级国家下拉设为必填
            if($('#country').val() === 'za') {
                $('#country2').attr('required', true);
            }
        }
    }

    // 整体校验逻辑
    function validation() { 
        let valid = true;
        const activeRadio = $('input[name="myfield"]:checked').val();

        // 校验所有可见必填项
        $('[required]:visible').each(function () {
            if ($(this).val().trim() == '') valid = false;
        });

        // Field_Two场景下二选一校验
        if(activeRadio === 'Field_Two') {
            const refVal = $('[name="reference_no"]').val().trim();
            const idVal = $('[name="id_no"]').val().trim();
            if(refVal === '' && idVal === '') valid = false;
        }

        // 控制提交按钮状态
        $('#button1').attr('disabled', !valid);
    }
});

核心修改说明

  • 重构了必填项动态更新逻辑,覆盖通用必填、场景化必填、国家二级下拉的必填规则,同时支持select标签的必填校验
  • 新增Field_Two场景下reference no和id no二选一的专属校验逻辑
  • 补全了事件监听,所有输入、选择操作都会实时触发校验
  • 显隐逻辑完全对齐需求,Field_Two场景下自动隐藏国家、姓名等不需要的字段,避免无效校验
  • 校验逻辑过滤了隐藏字段,只有当前可见的必填项才会参与校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:06:03