2016-12-30 292 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();