【问题标题】:Validating groups of checkboxes using jquery使用 jquery 验证复选框组
【发布时间】:2010-03-25 23:07:06
【问题描述】:

如果我有这样的复选框组:

<input type="checkbox" name"checkboxes1" value="#value1">
<input type="checkbox" name"checkboxes1" value="value2">
<input type="checkbox" name"checkboxes1" value="#value3">

<input type="checkbox" name"checkboxes2" value="value1">
<input type="checkbox" name"checkboxes2" value="#value2">
<input type="checkbox" name"checkboxes2" value="#value3">

如果以下两个条件都适用,jquery 中是否有一种简单的方法可以为每组复选框返回值 1:

  • 组中所有以 # 开头的复选框都被选中
  • 组中所有值不以 # 开头的复选框都不会被选中

注意:复选框的名称是动态生成的,因此组中可以有任意数量,任意数量的组,每个组可以有任意名称。

谢谢:)

【问题讨论】:

    标签: jquery jquery-selectors


    【解决方案1】:

    您可以选择带有[attr^=\#] 模式的属性。 因此,您可以编写如下代码:

    <html>
    <head>
      <script src="./lib/jquery/jquery-1.3.2.js"></script>
      <script>
        var checkall = function() {
    
        var withHashAllChecked = true;
        var withoutHashAllChecked = true;
    
    $("input.cb1:checkbox[value^=#]").each(function() {
        if (!this.checked) {
            withHashAllChecked = false;
        }
    });
    
    
    $("input.cb1:checkbox:not([value^=#])").each(function() {
        if (!this.checked) {
            withoutHashAllChecked = false;
        }
    });
    
    var result = withHashAllChecked && (!withoutHashAllChecked);
    alert(result);
    
    };
    
    $(function() {
        $("input").click(checkall);
    });
      </script>
    </head>
    <body>
    <input class="cb1" type="checkbox" name"checkboxes1" value="#value1">#1</input>
    <input class="cb1" type="checkbox" name"checkboxes1" value="value2">2</input>
    <input class="cb1" type="checkbox" name"checkboxes1" value="#value3">#3</input>
    
    <input class="cb2" type="checkbox" name"checkboxes2" value="value1">1</input>
    <input class="cb2" type="checkbox" name"checkboxes2" value="#value2">#2</input>
    <input class="cb2" type="checkbox" name"checkboxes2" value="#value3">#3</input>
    
    </body>
    </html>
    

    编辑

    更新了完整的工作代码。这只是检查类 cb1 的复选框,只是为了让您了解如何实现。我必须道歉,原来的代码有一些我没有检查的问题。反正我试了上面的代码应该没问题(要不要修改jquery目录引用)。

    【讨论】:

    • 我似乎无法让它与该代码一起工作 - 总是返回 false。我可以将 CONTEXT 设置为当前复选框的名称吗?
    • 我已经设法使用您的代码使其完美运行,并对其进行了一些调整以使用名称,而不是类 - 不过您完成了所有的工作! :) 非常感谢...
    【解决方案2】:
    var checked = $('input:checkbox:checked[name=checkboxes1][value^=#]').length;
    var notchecked = $('input:checkbox:not(:checked)[name=checkboxes1][value^=#]').length;
    

    【讨论】:

    • 我已经设法使用上面的代码选择了值以 # 开头的复选框(但您不需要在开始时包含输入),但是如果如果它们的值以 # 开头,则同名的复选框组都被检查,如果不是,则为 0?谢谢..
    • 您只需要在选择器中添加一个搜索 name 属性与您想要的值,然后确定它是否找到任何结果。
    • 是否可以将名称作为数组插入?因为我事先不知道复选框的名称。因此,为所有复选框名称创建一个唯一数组,其中至少有一个以 # 开头的值?谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多