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

C# ASP.NET:如何通过JavaScript获取EditorFor的数量或类名

解决动态生成复选框的勾选触发显示div问题

首先,你遇到的核心问题是@Html.EditorFor(m => m[i].IsSingle)会生成数量不固定、ID不统一的复选框,之前针对单个固定ID的jQuery代码自然无法适配这种动态场景。下面给你两种实用的解决方案:

方法一:给所有复选框添加统一类名(推荐)

先修改你的Razor代码,给每个生成的复选框加上一个统一的class,这样后续JS可以轻松选中所有目标元素:

@for (int i = 0; i < Model.Count; i++) 
{ 
    @Html.EditorFor(m => m[i].IsSingle, new { htmlAttributes = new { @class = "single-checkbox" } }) 
}

然后编写对应的jQuery代码,监听这个类的复选框变化,只要有任意一个被勾选,就显示目标div:

$(document).ready(function() {
    // 页面加载时先默认隐藏目标div(如果需要的话)
    const $targetDiv = $("#tdSingle");
    $targetDiv.hide();

    // 选中所有带single-checkbox类的复选框
    const $checkboxes = $(".single-checkbox");

    // 页面初始化时先检查一次状态(防止默认有勾选的情况)
    const hasCheckedBox = $checkboxes.filter(":checked").length > 0;
    $targetDiv.toggle(hasCheckedBox);

    // 监听复选框的change事件
    $checkboxes.on("change", function() {
        // 检查是否有任意一个复选框被勾选
        const isAnyChecked = $checkboxes.filter(":checked").length > 0;
        // 根据状态切换div的显示/隐藏
        $targetDiv.toggle(isAnyChecked);
    });
});

方法二:通过属性选择器匹配(无需修改Razor代码)

如果你不想修改Razor代码,也可以利用EditorFor生成的name属性特征来选中所有复选框。默认情况下,生成的name会是类似[0].IsSingle、[1].IsSingle这样的格式,我们可以用包含选择器[name*='IsSingle']来匹配:

$(document).ready(function() {
    const $targetDiv = $("#tdSingle");
    $targetDiv.hide();

    const $checkboxes = $("input[type='checkbox'][name*='IsSingle']");
    
    // 初始化检查
    const hasCheckedBox = $checkboxes.filter(":checked").length > 0;
    $targetDiv.toggle(hasCheckedBox);

    $checkboxes.on("change", function() {
        const isAnyChecked = $checkboxes.filter(":checked").length > 0;
        $targetDiv.toggle(isAnyChecked);
    });
});

补充说明

  • toggle(isAnyChecked)方法会根据传入的布尔值自动切换元素的显示/隐藏:true显示,false隐藏,完美适配“有勾选就显示,全取消就隐藏”的需求。
  • 如果你的需求是“只要勾选过一次就一直显示,哪怕后来取消所有勾选”,只需要把toggle(isAnyChecked)改成$targetDiv.show()即可,但这种场景相对少见,你可以根据实际需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:29:51