使用Jquery切换复选框时出现问题

时间:2013-08-02 19:11:08

标签: javascript jquery html

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

http://jsfiddle.net/49Krx/

我的代码目前正常工作,当必要的复选框都未选中时。简短的逻辑是这样的:

如果选中AIR(默认情况下未选中),则会在检查AIR之前显示一条消息,告知您必须检查HES。如果同时选中了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);
            }
        }
    });
});

非常感谢任何协助。

2 个答案:

答案 0 :(得分: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);
        }
    });
});

<强> Check Fiddle

所以基本上你要检查checked属性以确定它是否被DB转储。如果是这样,attr('checked')将保持正确..

答案 1 :(得分:0)

您需要做的是在.HES上添加辅助检查,以确定在您致电$(this).prop('checked', !this.checked);

之前是否已经检查过它

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

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

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