8

我试图关注这个线程,它提出了一个检查不确定状态的解决方案。

我正在使用 ASP.NET,似乎单击处于不确定状态的复选框将取消选中它,并且不会触发任何事件(底层复选框实际上是“未选中”)。当我单击处于不确定状态的复选框时,我正在考虑让 Javascript 为我检查它(更喜欢这种逻辑,这应该会触发我的 ASP.NET 事件)。

$(document).ready(function () {
    $(".UndefinedCheckboxState :checkbox").prop("indeterminate", true);

    $(":checkbox").click(function () {
        if ($(this).prop("indeterminate")) {
            $(this).prop("indeterminate", false);
            $(this).prop("checked", true);
        }
    });
});

更新:点击事件工作正常,但条件if永远不是真的!我一直在不确定状态下单击复选框...

4

3 回答 3

10

事实证明,如果单击的复选框具有不确定状态,则通过单击事件中的第一条指令,该属性已经消失。

我已经替换了我的逻辑来测试尚未消失的东西:

<script type="text/javascript">
    $(document).ready(function() {
        $(".UndefinedCheckboxState :checkbox").prop("indeterminate", true);

        $(":checkbox").click(function () {
            if ($(this).closest("span").hasClass("UndefinedCheckboxState")) {
                $(this).prop("indeterminate", false);
                $(this).prop("checked", true);
            }
        });
    });
</script>
于 2013-05-22T17:53:31.733 回答
2

扩展@adeneo 的答案,试试这个:

$(document).ready(function () {
    $(".UndefinedCheckboxState input[type='checkbox']").prop("indeterminate", true);

    $("input[type='checkbox']").on('click', function () {
        console.log('changed');
        console.log('current value: '+$(this).prop('checked') );  
    });
});

查看小提琴

于 2013-05-22T17:53:57.590 回答
0

只需使用is()

$(document).ready(function () {
    $(".UndefinedCheckboxState :checkbox").prop("indeterminate", true);

    $(":checkbox").click(function () {
        if ($(this).is(":indeterminate")) {
            $(this).prop("indeterminate", false);
        }
        $(this).prop("checked", true);
    });
});
于 2020-04-03T05:12:43.307 回答