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

我的根据国家选择显示/隐藏州字段的JS脚本异常,求排查

解决方案

你的代码核心问题在于:JavaScript中判断国家字段值为"1",但下拉选框的<option>未设置value属性,默认情况下val()获取的是选项文本内容(选中United States时,值是"United States"而非"1"),导致显示/隐藏逻辑无法触发。以下是修正后的完整实现:

1. 修改CSHTML表单代码

给国家下拉框选项添加value属性,同时默认隐藏州字段容器:

<div class="form-group col-sm-4 mt-4">
    <label asp-for="Form.Country" class="control-label"></label>
    <select asp-for="Form.Country" class="form-control">
        <option disabled selected value="">Choose your Country</option>
        <option value="CA">Canada</option>
        <option value="US">United States</option>
        <option value="MX">Mexico</option>
    </select>
    <span asp-validation-for="Form.Country" class="text-danger"></span>
</div>
<!-- 默认隐藏州字段容器 -->
<div class="form-group col-sm-4 mt-4" id="StateContainer" style="display: none;">
    <label asp-for="Form.State" class="control-label"></label>
    <select asp-for="Form.State" asp-items="Model.States" class="form-select">
        <option disabled selected value="">Choose your State</option>
    </select>
    <span asp-validation-for="Form.State" class="text-danger"></span>
</div>

2. 修正JavaScript逻辑

调整判断条件为匹配美国的value值(这里用"US"),同时添加页面初始化处理、隐藏时清空字段值并处理验证:

@section Scripts {
<script type="text/javascript">
    // 页面加载完成后初始化状态
    $(document).ready(function() {
        toggleStateField($("#Country").val());
    });

    $("#Country").change(function () {
        toggleStateField($(this).val());
    });

    // 封装显示/隐藏逻辑
    function toggleStateField(countryValue) {
        var stateContainer = $("#StateContainer");
        var stateSelect = $("#State");
        
        if (countryValue === "US") {
            stateContainer.show();
            stateSelect.removeAttr("data-val-required");
        } else {
            stateContainer.hide();
            stateSelect.val("");
            // 清除验证提示
            $("span[data-valmsg-for='Form.State']").html("");
            stateSelect.attr("data-val-required", "false");
        }
    }
</script>
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

关键说明

  • 给下拉选项设置明确value属性,避免依赖文本内容判断,提升代码稳定性
  • 默认隐藏州字段容器,符合初始交互逻辑
  • 隐藏时清空州字段值并处理验证规则,防止表单提交时出现无效验证错误
  • 逻辑封装为独立函数,便于后续维护和复用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:01:27