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

点击自定义滑动checkbox时修改其外层div边框颜色的实现方法

方案1:Blazor原生实现(推荐,无需JS)

完全不需要引入JS交互,从Blazor的绑定逻辑出发即可解决动态列表ID重复问题,符合Blazor开发规范,性能更优。

步骤1:扩展角色实体类

给你的角色实体新增选中状态字段:

// 若你可以直接修改原Role类
public class AppRole
{
    // 原有字段(Description、CommonName等)保持不变
    public string Description { get; set; }
    public string CommonName { get; set; }
    // 新增选中状态字段
    public bool IsChecked { get; set; }
}

// 若原Role类不可修改,可封装一层ViewModel
public class AppRoleViewModel
{
    public AppRole Role { get; set; }
    public bool IsChecked { get; set; }
}

步骤2:修改页面渲染代码

在循环中绑定选中状态和父容器的类,完全不需要设置ID:

@if (AppRolesDetails != null)
{
    foreach (var role in AppRolesDetails)
    {
        <div class="float-container">
            <!-- 父容器类根据选中状态动态切换 -->
            <div class="@(role.IsChecked ? "float-child box-color-change" : "float-child")">
                <input type="checkbox" 
                       class="checkbox" 
                       @checked="role.IsChecked"
                       @onchange="eventArgs => { 
                           role.IsChecked = (bool)eventArgs.Value;
                           CheckboxClicked(role.Description, eventArgs.Value); 
                       }"/>
            </div>
            <div class="float-child">
                <p>Application Role - </p>
                <br />
                <p><b>@role.Description</b></p>
                <br/>
            </div>
        </div>
        AppOwnerCommonName = role.CommonName;
    }
}
方案2:JS实现修正(解决ID重复问题)

如果你坚持使用JS实现,不需要给元素设置固定ID,通过DOM节点关系查找父容器即可,同时使用事件委托适配动态渲染的元素:

步骤1:删除所有元素的固定ID设置

不需要给float-child和checkbox加id属性,保持原有类名即可。

步骤2:修改JS代码如下

function BorderColorChangeOnCheckboxClick(){
    // 使用事件委托绑定,适配动态新增的元素
    $(document).on('click', '.checkbox', function () {
        // 查找当前点击的checkbox最近的父级.float-child元素
        const $parentFloat = $(this).closest('.float-child');
        if ($(this).is(":checked")) {
            $parentFloat.addClass('box-color-change');
        } else {
            $parentFloat.removeClass('box-color-change');
        }
    });
};

注:原有JS中重复设置的width、padding、text-align-last属性属于冗余代码,这些属性已经在float-child类中定义,只需要切换控制边框的box-color-change类即可,代码更简洁易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:36:02