2016-12-30 177 views
1

使用Jquery我有代码可以选择与选中的复选框相同值的所有复选框。它还会禁用与所选复选框位于同一行的所有复选框(复选框位于表格内)。基于值重复选择复选框

这太棒了。然而它有点不完整,而最后一块拼图正在逃避我。根据定义,禁用的行上的复选框被禁用。但是,如果所有与禁用的值相同的复选框也被禁用,那将是完美的。这是为了防止用户选择不兼容的项目(还有一个服务器端措施来防止这种情况发生,但客户端更加漂亮和用户友好)。

的jsfiddle:https://jsfiddle.net/q9q7h1y8/

$(".chkbox").on('change', function() { 

    var currentObj = $(this); 
    var val = $(this).val(); 
    if ($(this).is(":checked")) { 

     $(":checkbox[value='" + val + "']").prop("checked", true); 
     $(this) 
      .closest("tr") 
      .find(".chkbox").attr("disabled", "disabled"); 
     $(currentObj).removeAttr("disabled"); 
     $(":checkbox[value='" + val + "']") 
      .closest("tr") 
      .find(".chkbox").attr("disabled", "disabled"); 
     $(":checkbox[value='" + val + "']").removeAttr("disabled"); 
    } else { 
     $(":checkbox[value='" + val + "']").prop("checked", false); 
     $(":checkbox[value='" + val + "']") 
      .closest("tr") 
      .find(".chkbox").removeAttr('disabled');; 

    } 

}); 

预期功能将,例如,如果涉及到20040任何复选框被选中禁用与30680在jsfiddle link两个复选框。

+0

感谢所有伟大的答案家伙 – Stumbler

回答

1
$(":checkbox[value='" + val + "']") 
     .closest("tr") 
     .find(".chkbox").attr("disabled", "disabled"); 

上述代码将查找同一行上的所有复选框并禁用所有复选框。我建议循环浏览这些复选框,禁用它们,此外,选择所有其他具有相同值的复选框并禁用它们。您可以通过下面的一个替换上面的代码这样做:

$(":checkbox[value='" + val + "']") 
    .closest("tr").find(".chkbox").each(function(){ 
    var $this = $(this); 
    $this.attr('disabled', 'disabled'); 
    $(":checkbox[value='" + $this.val() + "']").attr('disabled', 'disabled'); 
}); 

您将有类似的事情去除残疾人属性。

$(":checkbox[value='" + val + "']") 
    .closest("tr").find(".chkbox").each(function(){ 
    var $this = $(this); 
    $this.removeAttr('disabled'); 
    $(":checkbox[value='" + $this.val() + "']").removeAttr('disabled'); 
}); 

Demo

1

这里检查更新小提琴jsfiddle.net/bharatsing/q9q7h1y8/2/

添加了一些代码在你的提琴代码:

$(":checkbox[value='" + val + "']") 
          .closest("tr") 
          .find(".chkbox").each(function(){ 
           $(":checkbox[value='" + $(this).val() + "']").attr("disabled", "disabled"); 
          }); 
1

每次更改你可以存储它的值复选框,然后做类似:

$('* :input[value="value?"]').action();