繁体   English   中英

根据值重复选择复选框

[英]Repeated selecting of checkboxs based on value

使用Jquery,我的代码可以选择与选定复选框具有相同值的所有复选框。 它还禁用与所选复选框在同一行的所有复选框(这些复选框在表中)。

太好了 但是,这还有些残缺,难题的最后一步使我难以理解。 根据定义,禁用的行上的复选框是禁用的。 但是,如果也禁用所有具有与禁用值相同的值的复选框,那将是完美的。 这是为了防止用户选择不兼容的项(还有服务器端的措施可以防止这种情况发生,但是客户端要漂亮得多并且对用户友好)。

JSFiddle: https ://jsfiddle.net/q9q7h1y8/

$(".chkbox").on('change', function() {

    var currentObj = $(this);
    var val = $(this).val();
    if ($(this).is(":checked")) {

        $(":checkbox[value='" + val + "']").prop("checked", true);
        $(this)
            .closest("tr")
            .find(".chkbox").attr("disabled", "disabled");
        $(currentObj).removeAttr("disabled");
        $(":checkbox[value='" + val + "']")
            .closest("tr")
            .find(".chkbox").attr("disabled", "disabled");
        $(":checkbox[value='" + val + "']").removeAttr("disabled");
    } else {
        $(":checkbox[value='" + val + "']").prop("checked", false);
        $(":checkbox[value='" + val + "']")
            .closest("tr")
            .find(".chkbox").removeAttr('disabled');;

    }

});

例如,如果选中了与20040相关的任何复选框,则预期的功能将在jsfiddle链接上禁用与30680相关的两个复选框。

$(":checkbox[value='" + val + "']")
        .closest("tr")
        .find(".chkbox").attr("disabled", "disabled");

上面的代码将在同一行中找到所有复选框,并禁用所有复选框。 我建议循环浏览这些复选框,将其禁用,此外,选择所有其他具有相同值的复选框并将其禁用。 您可以通过将以下代码替换为以下代码来实现:

$(":checkbox[value='" + val + "']")
  .closest("tr").find(".chkbox").each(function(){
    var $this = $(this);
    $this.attr('disabled', 'disabled');
    $(":checkbox[value='" + $this.val() + "']").attr('disabled', 'disabled');
});

您将必须执行类似的操作才能删除Disabled属性。

$(":checkbox[value='" + val + "']")
  .closest("tr").find(".chkbox").each(function(){
    var $this = $(this);
    $this.removeAttr('disabled');
    $(":checkbox[value='" + $this.val() + "']").removeAttr('disabled');
});

演示版

在这里检查更新的小提琴jsfiddle.net/bharatsing/q9q7h1y8/2/

在您的小提琴代码中添加了一些代码:

$(":checkbox[value='" + val + "']")
                             .closest("tr")
                             .find(".chkbox").each(function(){
                                $(":checkbox[value='" + $(this).val() + "']").attr("disabled", "disabled");
                             });

每次更改复选框时,都可以存储其值,然后执行以下操作:

$('* :input[value="value?"]').action();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM