我有一套代码,几周前我最近从这里得到了帮助。
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。