0

我在 SO 上阅读了很多类似的问题,我知道这个问题已经被问了很多。我有禁用部分,它工作正常。但是,当我开始取消选中任一组中的复选框时,一切都将被撤消。基本上,当单击任何组的复选框时,应禁用另一个组。

这是我的 HTML

<tr>
    <td><input type="checkbox" class="printgroup"></td>
    <td><input type="checkbox" class="downgroup"></td>
</tr>
<tr>
    <td><input type="checkbox" class="printgroup"></td>
    <td><input type="checkbox" class="downgroup"></td>
</tr>
<tr>
    <td><input type="checkbox" class="printgroup"></td>
    <td><input type="checkbox" class="downgroup"></td>
</tr>
<tr>
    <td><input type="checkbox" class="printgroup"></td>
    <td><input type="checkbox" class="downgroup"></td>
</tr>

这是禁用任何其他组的 JS。我知道 JS 不是最漂亮的,也许你可以帮我把它做得更好?

$(function(){
  $(".printgroup").click ( function() {
    if ( !$(this).is ( ":checked" ) )
    {
        $(".downgroup").removeAttr ( "disabled" );
        $('#printdown').attr('value', 'Go');
    }       
    else{
      $(".downgroup").attr ( "disabled" , true );
      $('#printdown').attr('value', 'Print');
    }
  });
});

$(function(){
  $(".downgroup").click ( function() {
    if ( !$(this).is ( ":checked" ) )
    {
        $(".printgroup").removeAttr ( "disabled" );
        $('#printdown').attr('value', 'Go');
    }       
    else{
      $(".printgroup").attr ( "disabled" , true );
      $('#printdown').attr('value', 'Download');
    }
  });
});

在这里拉小提琴

编辑:应该更坚持。我在发布几分钟后解决了这个问题。

我只是替换了!$(this).is ( ":checked" )to !$('.downgroup').is ( ":checked" )Still,第二部分仍然存在:我让 JS 高效吗?我现在有两个功能。我可以将它们减少到一个吗?

4

1 回答 1

1

是的,您可以将它们融合在一起,因为它们都做同样的事情。只是组不同。请参阅:http: //jsfiddle.net/wQfKz/2/

$(".printgroup, .downgroup").on("click", function() {
    var isPrintGroup = $(this).is(".printgroup");
    var anyChecked = $(isPrintGroup ? ".printgroup" : ".downgroup").is(":checked");

    // disable other group depending on whether the current group has anything checked
    $(isPrintGroup ? ".downgroup" : ".printgroup").prop("disabled", anyChecked);

    if(!anyChecked) {
        $("#printdown").val("Go");
    } else {
        $("#printdown").val(isPrintGroup ? "Print" : "Download");
    }
});
于 2012-08-22T11:25:39.103 回答