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

使用jQuery循环取消复选框选中状态时为何仅首个生效?

问题分析与解决方案

你遇到的核心问题是HTML元素的ID必须唯一,但你在动态生成复选框时给所有复选框都用了同一个id="chkBoxSelected"。当你用$('#chkBoxSelected')选择元素时,jQuery只会匹配到页面上第一个拥有这个ID的元素,这就是为什么只有第一个复选框能取消选中的原因。

下面是具体的修复步骤:

1. 修复动态生成复选框的代码

把固定的id="chkBoxSelected"改成class(比如class="chkBoxSelected"),这样可以通过class选择器选中所有复选框,同时避免ID重复的问题。另外,你给生成的<tr>也用了固定ID,同样会导致重复,建议改成带索引的唯一ID,避免后续操作出问题。修改后的代码如下:

function fillServicesGrid() {
    var url = '@Url.Action("GetServices")';
    var data = '' 
    $.get(url, data, function (response) {
        $("#tbodytblServices").html("");
        $.each(response, function (i, val) {
            $("#tbodytblServices").append(
                $('<tr>').attr('id', 'trServiceRecord_' + i) // 改为唯一ID
                .append($('<td>').attr('id', "tdServiceID" + i).html(val.ServiceID))
                .append($('<td>').attr('id', "tdServiceName" + i).html(val.ServiceName))
                .append($('<td>').attr('id', "tdServicePrice" + i).html(val.ServicePrice))
                .append($('<input type="checkbox" class="selectColumn chkBoxSelected" />')) // 用class替代重复ID
            );
        });
    });
}

2. 修改取消复选框选中状态的代码

现在可以通过class选择器选中所有选中的复选框,直接取消它们的选中状态,去掉原来多余的过滤逻辑:

// 取消所有选中的目标复选框
$('.chkBoxSelected:checked').prop("checked", false);

3. 优化AJAX提交逻辑(可选但推荐)

你当前在循环里逐个发送AJAX请求,若选中多行会触发多个请求。如果想等所有请求完成后再统一取消选中,可以用Promise.all来处理,避免提交未完成就取消选中的情况:

function selectService() {
    var ajaxPromises = [];
    $("#tblServices tr").filter(':has(:checkbox:checked)').each(function () {
        var url = '@Url.Action("CreateInvoice")';
        var data = { 
            fk_BookingID: $("#Booking_ID").val(), 
            fk_ServiceID: $("td:eq(0)", this).text() 
        };
        // 将每个AJAX请求包装为Promise存入数组
        var promise = $.post(url, data).done(function (response) {
            if (response.ReturnStatusJSON === true) {
                swal("Done", response.ReturnMessageJSON, "success");
            } else {
                swal("Sorry !", response.ReturnMessageJSON, "error");
            }
        });
        ajaxPromises.push(promise);
    });

    // 所有请求完成后统一取消选中
    Promise.all(ajaxPromises).then(function() {
        $('.chkBoxSelected:checked').prop("checked", false);
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:58:30