2010-03-25 75 views
1

复选框组如果我有复选框的群体,像这样:验证使用jQuery

<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为每个组复选框,如果同时满足以下条件适用于:

  • 所有组中以#在自己的价值开始复选框被检查
  • 组中所有的复选框不带#在他们的价值开始的不检查

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

谢谢:)

回答

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目录引用)。

+0

我似乎无法得到它与该代码的工作 - 总是返回false。我可以将CONTEXT设置为当前复选框的名称吗? – user280533 2010-03-25 11:03:27

+0

我已经设法使用你的代码完美地工作,并调整它使用名称,而不是类 - 你做了所有的腿部工作! :)非常感谢... – user280533 2010-03-25 16:36:35

0
var checked = $('input:checkbox:checked[name=checkboxes1][value^=#]').length; 
var notchecked = $('input:checkbox:not(:checked)[name=checkboxes1][value^=#]').length; 
+0

我设法选择了以#开始使用上面的代码(但你不需要在开始时包含输入)的值的复选框,但是如何返回1 if所有具有相同名称的复选框都将被检查,如果它们的值以#开头,如果它们不是?谢谢.. – user280533 2010-03-25 13:00:25

+0

您只需向选择器中添加所需值的名称属性搜索,然后确定它是否找到任何结果。 – PetersenDidIt 2010-03-25 13:16:54

+0

是否可以插入名称,比如数组?因为我事先不知道复选框的名称。因此,为所有复选框名称创建一个唯一阵列,其中至少有一个以#开头的值? 谢谢:) – user280533 2010-03-25 13:29:36