javascript - 互斥的复选框逻辑

标签 javascript jquery html checkbox

我有一个按钮和 4 个复选框:A、B、C 和 D。该按钮默认处于禁用状态。

  • 选中 B、C 和 D 的任意组合即可启用该按钮。

  • 选中 C 和 D 的任意组合将取消选中 A。

  • 选中 A 将取消选中 C 和 D,并禁用该按钮。

  • 但是如果 A 和 B 都被选中,则该按钮将被启用。

这就是我到目前为止所拥有的。

HTML:

<input type="checkbox" value="" name="cb1" id="1cb1">
<input type="checkbox" value="" name="cb1" id="1cb2">
<input type="checkbox" value="" name="cb1" id="1cb3">
<input type="checkbox" value="" name="cb1" id="1cb4">

<button id="b1" class="btn btn-disabled" disabled="disabled">Click me</button>

jquery

        <script>
            $(document).ready(function(){
                $("#1cb1").click(function() {
                    if ($("#1cb2").is(":checked")) {
                     $("#b1").removeAttr("disabled").removeClass("btn-disabled");
                            $("#1cb3").attr("checked",false);
                            $("#1cb4").attr("checked",false);
                    } else {
                        $("#1cb3").attr("checked",false);
                        $("#1cb4").attr("checked",false);
                        $("#b1").attr("disabled", "disabled").addClass("btn-disabled");             
                    }
                });

                $("#1cb3, #1cb4").click(function() {
                    $("#1cb1").attr("checked",false)
                    $("#b1").removeAttr("disabled").removeClass("btn-disabled");
                });

                $("#1cb2").click(function() {
                    if ($("#1cb1").is(":checked")) {
                             $("#b1").removeAttr("disabled").removeClass("btn-disabled");
                            $("#1cb3").attr("checked",false);
                            $("#1cb4").attr("checked",false);
                    } else {
                        $("#b1").removeAttr("disabled").removeClass("btn-disabled");           
                    }
                });
            }); 
        </script>

我知道这有点困惑,这就是为什么我向你们寻求帮助以找到正确的解决方案。

提前致谢。

最佳答案

要理解问题的棘手逻辑,最好了解现实世界的背景 - 但wth。这里是 A-B-C-D 复选框闪烁的灯光;)

    //Checking A unchecks C and D, and disables the button.
    function a() {
        if($("#A").is(":checked")) {
            $("#C, #D").prop("checked",false);
            $("#b1").prop("disabled",true);
        }
    }
    //Checking any combination of C and D unchecks A.
    function cAndD() {
        if($("#C").is(":checked") && $("#D").is(":checked")) {
            $("#A").prop("checked",false);
        }
    }
    //But if A and B are both checked, then the button is enabled.
    function aAndB() {
        if($("#A").is(":checked") && $("#B").is(":checked")) {
            $("#b1").prop("disabled",false);
        }
    }
    //Checking any combination of B, C and D enables the button.
    function bAndCAndD() {
        if($("#B").is(":checked") && $("#C").is(":checked") && $("#D").is(":checked")) {
            $("#b1").prop("disabled",false);
        }
    }
    //because of the "But..." ;)
    var rulesInOrder = {
        "A": [a, aAndB],
        "B": [aAndB, bAndCAndD],
        "C": [bAndCAndD, cAndD],
        "D": [bAndCAndD, cAndD],
    };

    $(document).ready(function(){
        $("input").click(function() {
            rulesInOrder[this.id].forEach(function(rule){rule();});
        });
    });
<script src="https://code.jquery.com/jquery-2.2.3.js"></script>
<label><input type="checkbox" value="" name="cbA" id="A">A</label><br>
<label><input type="checkbox" value="" name="cbB" id="B">B</label><br>
<label><input type="checkbox" value="" name="cbC" id="C">C</label><br>
<label><input type="checkbox" value="" name="cbD" id="D">D</label><br>
<button id="b1" class="btn btn-disabled" disabled="disabled">Click me</button>

关于javascript - 互斥的复选框逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36507905/

相关文章:

javascript - 根据先前计算的值计算出比率

Javascript 问题 - 在 document.getElementById 之后无法提交表单

javascript - 如何在点击时显示/隐藏内容

javascript - jQuery:如何检查两个元素是否具有相同的类

javascript - Jquery 在大型数组上自动完成

javascript - 根据点击的内容操作 5 个复选框

jquery - <select> 根据其他 <select> 值改变

javascript - 将输入类型文本转换为纯文本

html - Bootstrap 下拉功能不起作用

javascript - Jquery 计算元素中的字符并给太短的字符填充