根据复选框多选来禁用按钮问题?

时间:2014-08-29 07:42:13

标签: jquery html checkbox

我必须动态禁用特定状态的删除按钮,并且我在某种程度上成功地执行了此操作,但是当我进行多选时它失败了。

$(".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');

    });

正如在我的代码中提到的那样,我为hitaverage状态启用了删除按钮,并且为了保留所有我禁用它。

方案1(单选):每次选择单个复选框时都能正常工作。

场景2(多选):选中状态为“Dead”的复选框,然后选中“点击”状态的复选框,您可以观察到“删除”按钮将为enabled在我的情况下没有发生,因为在多选中并且存在“死”类型的状态,这应该使得整体上的按钮被禁用而没有发生。

感谢任何解决方法

2 个答案:

答案 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
  })
});

这应该是一个好的开始:)