Jquery 是否基于复选框多选禁用按钮问题?
我必须动态禁用特定状态的删除按钮,我在某种程度上成功地做到了这一点,但在我进行多选时失败了Jquery 是否基于复选框多选禁用按钮问题?,jquery,html,checkbox,Jquery,Html,Checkbox,我必须动态禁用特定状态的删除按钮,我在某种程度上成功地做到了这一点,但在我进行多选时失败了 $(".checkboxes").click(function () { var currentstatus; var blnEnableBtn = false; $('input:checked').each(function (index, element) { currentstatus = $.trim($(element).
$(".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(多选):选择状态为“死”的复选框,然后选择状态为“点击”的复选框。您可以观察到,“删除”按钮将被启用,
,这在我的情况下不应该像在多重选择中那样发生,并且有一种状态为“死”类型,这将使按钮在总体上被禁用,而这不会发生
任何解决方法都值得赞赏您所做的是,当您单击一个复选框时,您可以一次将其初始化为所有复选框。这就是为什么它可以工作,如果它只是一个复选框的话。 您希望为每个复选框提供自己的侦听器,使其操作保持在同一复选框内
$(".checkboxes").each(function() {
$(this).click(function(){
//Do something awesome
})
});
这应该是一个很好的开始:)如果我做对了,您应该将
每个
函数重写如下:
$('input:checked').each(function (index, element) {
currentstatus = $.trim($(element).closest('td').siblings()[2].innerText);
if (currentstatus == "hit" || currentstatus == "average")
blnEnableBtn = true;
});
所以现在,您仅针对所需的状态将blnEnabledBtn
设置为true(不需要else语句),如果这些状态未满足,它将保持为false
编辑:
第一个解决方案启用按钮,但显然这不是应该发生的。好吧,让我们把逻辑颠倒过来:
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;
}
});
请参阅工作。如果至少有一种状态为“命中”或“平均”,是否要禁用该按钮?然后只需添加
if(blnEnabledBtn===true)返回
作为每个回调的第一行。@supercool您在multiselect上的最终目标是什么?禁用按钮还是启用?应该满足哪些条件?如果我从中选择了多个复选框,则禁用@llya,如果任何人处于点击状态和平均状态我应该禁用按钮.ty,以供您使用,但仍然无效。假设我选中了一个其他状态的复选框并取消选中它,那么按钮将被启用,这是不应该发生的。现在单选失败了,我把它弄丢了。这是你的代码,有什么问题吗?我很震惊它的一切都很好,小提琴,但没有任何权利在vs2012。我只能用语言来解释我的问题。请参见案例1:如果我选中状态为“hit”的复选框,按钮将启用[foreach运行一次]<代码>案例2
:如果我现在再次检查一些其他状态,问题是foreach
运行2次,第一次运行时,按钮将被禁用进入if状态,第二次运行时,按钮将被启用进入else状态,这显然不是小提琴的情况。我可以在vs中调试。维尔德。过度驾驶正在发生