2009-05-28 64 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(); 
}