【问题标题】:Need help with jquery checkboxes set需要有关 jquery 复选框集的帮助
【发布时间】:2011-09-03 23:52:23
【问题描述】:

我有一个类似这样的 DOM 结构(我不想显示其他 td,因为人满为患):

<table>
<tr><td><input type="checkbox" name="checkbox1" class="rowSelectCheckbox"></td></input></tr>
<tr><td><input type="checkbox" name="checkbox2" class="rowSelectCheckbox"></td></input></tr>
<tr><td><input type="checkbox" name="checkbox3" class="rowSelectCheckbox"></td></input></tr>
<tr><td><input type="checkbox" name="checkbox4" class="rowSelectCheckbox"></td></input></tr>

</table>

<input type="checkbox" name="checkbox_select" id="lastCheckbox"></input>

我正在尝试做的是设置最后一个具有 lastCheckbox id 的复选框以检查是否选中了 任何 其他复选框(任何具有 checkbox1、checkbox 2 等 id 的复选框) , 否则如果 所有 其他复选框都未选中,则将最后一个复选框也设置为未选中。

【问题讨论】:

    标签: jquery checkbox checked


    【解决方案1】:

    一个小问题:结束 &lt;/input&gt; 标记属于 &lt;/td&gt; 标记之前。

    否则就很简单了。

    $(".rowSelectCheckbox").click(function(){
        var lastCheckbox = $("#lastCheckbox");
        if $(".rowSelectCheckbox:checked").length) {
            lastCheckbox.attr("checked", "checked");
        } else {
            lastCheckbox.removeAttr("checked");
        }
    });
    

    【讨论】:

      【解决方案2】:

      试试这个:

      $('.rowSelectCheckbox').change( function() {
          $('.rowSelectCheckbox').each( function() {
              if ($(this).prop('checked')) {
                  $('#lastCheckbox').prop('checked', true);
                  return false;
              }
      
              $('#lastCheckbox').prop('checked', false);
          } );
      } );
      

      小提琴:http://jsfiddle.net/B78vP/

      【讨论】:

      • 谢谢伙计,我在你提供的链接上看到了。它就像一个魅力。
      • 不是要让你失望,而是用.rowSelectCheckbox 循环遍历任何东西有点浪费:/ 你只需要检查.rowSelectCheckbox 中的一个是否被选中(而不是全部)跨度>
      【解决方案3】:

      下面的 jQuery 应该可以解决问题

      $(document).ready(function() {
          $(".rowSelectCheckbox").click(function() {
              var numChecked = $(".rowSelectCheckbox").filter(":checked").length;
      
              if(numChecked > 0)
              {
                  $("#lastCheckbox").prop("checked", "checked");
              }
              else
              {
                  $("#lastCheckbox").prop("checked", false);
              }
          });
      });
      

      当任何一个被点击时,这将计算选中复选框的数量,如果这个数字大于 0,则选中表格外的最后一个复选框。

      有一个工作示例here

      【讨论】:

        【解决方案4】:

        你应该这样做:

        $('.rowSelectCheckbox').change( function() {
            flag = false;
            $('.rowSelectCheckbox').each( function() {
                if ($(this).is(':checked')) {
                    flag = true;
                }
            });    
            $('#lastCheckbox').prop('checked', flag);
        });
        

        现场演示:http://jsfiddle.net/nayish/teXHe/

        【讨论】:

        • 由于某种原因它似乎无法正常工作......实际上它对我来说似乎太复杂了,尽管我非常渴望这个 sn-p
        • 已编辑的答案,我之前弄错了,只有在选中所有复选框时才有效。现在应该可以工作了:)
        • 是的,刚刚查看了演示。完美运行。谢谢。
        【解决方案5】:

        一个快速的 if 测试应该这样做:

        $("input.rowSelectCheckbox").change(function(){
            if ( $("input.rowSelectCheckbox:checked") ) { //include "rowSelectCheckbox" so id=lastCheckbox doesn't trip the test
                $("input#lastCheckbox").attr("checked");
            }
            else
                $("input#lastCheckbox").removeAttr("checked");
            }
        });
        

        循环,例如 .each(),是不必要的,因为您只关心 input.rowSelectCheckbox 中的(任何)一个是否被选中。这将在第一次遇到已检查的 &lt;input class="rowSelectCheckbox" /&gt; 时返回 true ;)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-07
          • 2011-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多