我有一套代码,几周前我最近从这里得到了帮助。

http://jsfiddle.net/49Krx/

当未选中必要的复选框时,我的代码当前可以正常运行。简短的逻辑是这样的:

如果选中了AIR(默认为未选中),则会显示一条消息,告知您必须先检查HES,然后再检查AIR。如果同时选中AIR和HES,并且您尝试取消选中HES,则会显示一条消息,告诉您您不能取消选中HES。

问题是:所有这些值都是由DB驱动的;一些条目可能已经检查了AIR或HES。完成后,该代码将被丢弃,甚至无法正常工作。检查以下:

http://jsfiddle.net/AUm7M/1/

AIR是检查对象,但似乎当我检查HES时,消息仍然显示。我什至尝试使用prop来在检查之前获取每两个复选框的值,但无济于事。我试图确保应用相同的规则,而不管是否从数据库中检查了AIR或HES。我下面的尝试示例:

$(function () {
    $('tr').on('change', '.AIR', function () {
        if (!$(this).closest('td').siblings('td').find('.HES').prop('checked')) {
            alert("HES has to be checked if AIR is to be checked.\nPlease go back and check HES.");
            $(this).prop('checked', !this.checked);
        }
    });

    $('tr').on('change', '.HES', function () {
        if (!$(this).closest('td').siblings('td').find('.AIR').prop('checked')) {
            if ($(this).closest('td').siblings('td').find('.AIR').is(':checked')) {
                alert("HES1 has to be checked if AIR is to be checked.\nPlease leave HES checked.");
                $(this).prop('checked', !this.checked);
            }
        }
    });
});


任何帮助将不胜感激。

最佳答案

您需要做的是在.HES上添加辅助检查,以确定在调用$(this).prop('checked', !this.checked);之前是否已被检查。

我用额外的支票更新了小提琴:

http://jsfiddle.net/AUm7M/2/

这应该满足您的要求,即使仅通过AIR进行加载,也可以检查HES。

07-28 09:51