Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Jquery切换复选框仍有问题_Javascript_Jquery_Html - Fatal编程技术网

Javascript 使用Jquery切换复选框仍有问题

Javascript 使用Jquery切换复选框仍有问题,javascript,jquery,html,Javascript,Jquery,Html,我有一套代码,几周前我从这里得到了帮助 当必要的复选框都未选中时,我的代码目前工作正常。简短的逻辑如下: 如果默认选中“空气未检查”,则会显示一条消息,告诉您必须先检查HES,然后再检查空气。如果同时选中了AIR和HES,并且您尝试取消选中HES,则会显示一条消息,告诉您无法取消选中HES 问题在于:所有这些值都是由DB驱动的;少数条目可能已检查空气或HES。完成后,代码被抛出,甚至无法工作。检查以下内容: 空气检查,但似乎当我检查他,信息仍然显示。我甚至尝试在检查之前使用prop来获取每两个复

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

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

如果默认选中“空气未检查”,则会显示一条消息,告诉您必须先检查HES,然后再检查空气。如果同时选中了AIR和HES,并且您尝试取消选中HES,则会显示一条消息,告诉您无法取消选中HES

问题在于:所有这些值都是由DB驱动的;少数条目可能已检查空气或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);
            }
        }
    });
});
任何帮助都将不胜感激。

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

因此,基本上您正在检查checked属性,以了解它是否被DB转储。如果是这样,attr'checked'将保持为真。

您需要做的是在.HES上添加一个辅助检查,以确定在调用$this.prop'checked'之前是否已对其进行了检查!这是检查过的

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


这应该满足您的要求,允许HES进行检查,即使它只进行空气检查。

Sushanth,我想我可能遗漏了部分代码,因为它部分工作,但删除了前面列出的规则。我将继续测试,以确保我这边没有做错任何事。为了它的价值,你的补充是有意义的。@TinyHaitian。。我不明白。。你能解释一下吗?我在这里插入了你的代码:结果,当检查了AIR和HES后,我试图删除HES,消息没有弹出,尽管它应该弹出。当两个都未选中时,空气被选中,消息就会出现。贾斯汀的回答可能会给你最接近我的需要。贾斯汀,你的代码,另一方面,似乎工作得很好。谢谢将标记为这样。