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中调试。维尔德。过度驾驶正在发生