2009-05-28 70 views
1

如果所有复选框都被取消选择,是否有快速的方法或函数能告诉我真假?没有通过数组? (与JS和HTML)验证所有复选框未选中的快速方法?

我所有的复选框具有相同的名称...

<form action="/cgi-bin/Lib.exe" method=POST name="checks" ID="Form2"> 
    <input type=checkbox name="us" value="Joe" ID="Checkbox1"> 
    <input type=checkbox name="us" value="Dan" ID="Checkbox2"> 
    <input type=checkbox name="us" value="Sal" ID="Checkbox3"> 
</form> 

回答

5

你必须通过他们循环。即使像jQuery这样的库也会循环遍历它们,只是将它隐藏起来。

var form = document.getElementById('Form2'); 
var inputs = form.getElementsByTagName('input'); 
var is_checked = false; 
for(var x = 0; x < inputs.length; x++) { 
    if(inputs[x].type == 'checkbox' && inputs[x].name == 'us') { 
     is_checked = inputs[x].checked; 
     if(is_checked) break; 
    } 
} 
// is_checked will be boolean 'true' if any are checked at this point. 
+0

那不只是返回,如果最后一个复选框检查?例如。萨尔在这个例子中。 – svinto 2009-05-28 22:24:51

+0

哎呀! Correcto。固定。 – 2009-05-28 22:27:13

2

总之,如果所有的不检查这个文档片断将返回true。只要找到一个被检查过的人,它就会立即退出。

var a = document.getElementsByName("us"); 
for(var i=0; i<a.length; i++) 
    if(a[i].checked) 
     return false; 
return true; 

(没有测试,但在概念上它是有效的)

+0

getElementsByName是古怪的在IE:http://www.quirksmode.org/dom/w3c_core.html – 2009-05-28 22:05:04

+0

感谢您的联系 - 没有看到图表之前 – 2009-05-28 22:13:40

6

jQuery将是一个大量的不必要的臃肿的任务这个琐事。试想,如果你正在运行它用于其他目的使用它,但你需要的是这样的:

function AreAnyCheckboxesChecked() { 
    var checkboxes = document.forms.Form2.elements.us; 
    for (var i = 0; i < checkboxes.length; i++) { 
    if (checkboxes[i].checked) { 
     return true; 
    } 
    } 
    return false; 
} 
0

你是什么意思

意味着没有通过阵列

回事?

你可以只是做

function check() { 
    var anyChecked = false; 
    var form = document.getElementById('Form2'); 
    var checkboxes = form.getElementsByTagName('input'); 
    for(var i=0; i < checkboxes.length; i++) { 
      if (checkboxes[i].checked) { 
       anyChecked = true; 
       break; 
      } 
    } 
    alert("Checkboxes checked? " + anyChecked); 
} 

Working Demo

+0

getElementsByName在IE中很古怪,在Opera中有一点:http://www.quirksmode.org/dom/w3c_core.html,我试图完全避免它。 – 2009-05-28 22:11:08

+0

欢呼声 - 现在更新 – 2009-05-28 22:32:36

4

的JavaScript:

var allischecked = (function(){ 
    var o = document.getElementById("Form2").getElementsByTagName("input"); 
    for(var i=0,l=o.length;i<l;i++){ 
    o[i].type === "checkbox" && o[i].name === "us" && o[i].checked || return false; 
    } 
    return true; 
})(); 

使用jQuery:

var allischecked = ($("#Form2 input:checkbox:not(checked)").length === 0); 
+0

+1也显示JQuery版本。是的,如果这就是你想要做的,JQuery是矫枉过正的。但是,如果您有其他验证,AJAX等,单线测试很难打败。 – GalacticCowboy 2009-05-30 23:56:44

0

如果你有大量的复选框ŧ你不想循环测试它可能会更有效地使用这种方法。

var checked = 0; 

$("input[type=checkbox]").live("click", function() { 
    if($(this).attr("checked")) checked++; 
    else checked--; 
} 

然后你就可以像这样测试。

if(checked === 0) { 
    doSomething(); 
}