1

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

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);
            }
        }
    });
});

任何帮助将不胜感激。

4

2 回答 2

0

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

我用额外的检查更新了小提琴:

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

这应该满足您允许检查 HES 的要求,即使它仅在检查 AIR 的情况下加载。

于 2013-08-02T19:26:16.340 回答
0

h.prop('checked')会给你财产价值

.attr('checked')会给你属性值HTML

使用两者的混合..

$(function () {
    $('tr').on('change', '.AIR', function () {
        var $this = $(this);
        var $hes = $this.closest('tr.row').find('.HES');
        if (!$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 () {
        var $this = $(this);
        var $air = $this.closest('tr.row').find('.AIR');
        if ($air.is(':checked') && !$this.prop('checked')) {
            alert("HES1 has to be checked if AIR is to be checked.\nPlease leave HES checked.");
            $this.prop('checked', !this.checked);
        }
    });
});

检查小提琴

所以基本上你正在检查检查的属性以了解它是否被数据库转储。如果是这样,attr('checked')将保持真实..

于 2013-08-02T19:18:59.370 回答