我有一套代码,几周前我最近从这里获得了帮助。
我的代码目前正常工作,当必要的复选框都未选中时。简短的逻辑是这样的:
如果选中AIR(默认情况下未选中),则会在检查AIR之前显示一条消息,告知您必须检查HES。如果同时选中了AIR和HES,并且您尝试取消选中HES,则会显示一条消息,告知您无法取消选中HES。
问题在于:所有这些值都是由DB驱动的;一些条目可能会检查AIR或HES。完成后,代码将被抛弃,甚至无法正常工作。检查下面:
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);
}
}
});
});
非常感谢任何协助。
答案 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);
我用额外的支票更新了小提琴:
这应该满足您允许检查HES的要求,即使它仅在加载AIR时加载。