我必须动态禁用特定状态的删除按钮,并且我在某种程度上成功地执行了此操作,但是当我进行多选时它失败了。
$(".checkboxes").click(function () {
var currentstatus;
var blnEnableBtn = false;
$('input:checked').each(function (index, element) {
currentstatus = $.trim($(element).closest('td').siblings()[2].innerText);
if (currentstatus == "hit" || currentstatus == "average")
blnEnableBtn = true;
else
blnEnableBtn = false;
});
if (blnEnableBtn)
$("#btnDeleteRow").removeAttr('disabled');
else
$("#btnDeleteRow").attr('disabled', 'disabled');
});
正如在我的代码中提到的那样,我为hit
和average
状态启用了删除按钮,并且为了保留所有我禁用它。
方案1(单选):每次选择单个复选框时都能正常工作。
场景2(多选):选中状态为“Dead”的复选框,然后选中“点击”状态的复选框,您可以观察到“删除”按钮将为enabled
在我的情况下没有发生,因为在多选中并且存在“死”类型的状态,这应该使得整体上的按钮被禁用而没有发生。
感谢任何解决方法
答案 0 :(得分:1)
如果我做对了,你应该按如下方式重写each
函数:
$('input:checked').each(function (index, element) {
currentstatus = $.trim($(element).closest('td').siblings()[2].innerText);
if (currentstatus == "hit" || currentstatus == "average")
blnEnableBtn = true;
});
现在,您只为期望的状态设置blnEnabledBtn
为true(不需要语句),如果不满足这些状态,则保持为假。
修改强>
第一个解决方案启用按钮,但显然不是应该发生的事情。好吧,让我们颠倒逻辑:
var blnEnableBtn = true;
$('input:checked').each(function (index, element) {
currentstatus = $.trim($(element).closest('td').siblings()[2].innerText);
if (currentstatus != "hit" && currentstatus != "average")
blnEnableBtn = false;
});
现在,如果至少有一个复选框没有所需状态,则该按钮被禁用。
编辑2:
经过一些澄清,我终于明白了这个问题。它可以通过添加额外的标志来解决,如下所示:
var blnEnableBtn = false;
var skipTheRest = false;
$('input:checked').each(function (index, element) {
if (skipTheRest === true)
return;
currentstatus = $.trim($(element).closest('td').siblings()[2].innerText);
if (currentstatus == "hit" || currentstatus == "average")
blnEnableBtn = true;
else {
skipTheRest = true;
blnEnableBtn = false;
}
});
见工作demo。
答案 1 :(得分:0)
您正在做的是当您单击一个复选框时,立即将其启动到所有复选框。这就是它工作的原因,如果只有一个复选框。 您希望为每个复选框提供自己的侦听器,以使其操作保持在同一个复选框中。
$(".checkboxes").each(function() {
$(this).click(function(){
//Do something awesome
})
});
这应该是一个好的开始:)