2009-05-28 13 views
1

Existe-t-il un moyen rapide ou une fonction qui me dirait vrai/faux si toutes les cases à cocher sont désélectionnées? Sans passer par le tableau? (Avec JS et HTML)Méthode rapide de validation si toutes les cases à cocher sont désactivées?

Toutes mes cases à cocher ont le même nom ...

<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> 

Répondre

5

Vous devez boucle à travers eux. Même une bibliothèque comme jQuery les parcourra en boucle, juste le cacher de vous.

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

Est-ce pas simplement revenir si la dernière case est vérifié? Par exemple. Sal dans l'exemple. – svinto

+0

Oups! Correcto. Fixé. –

2

En résumé, ce Snipped retourne vrai si tous ne sont pas vérifiées. Il expire dès qu'une vérification est trouvée.

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

(n'a pas testé, mais sur le plan conceptuel, il est valide)

+0

getElementsByName est décalé dans IE: http://www.quirksmode.org/dom/w3c_core.html –

+0

Merci pour le lien - pas vu ce tableau avant –

6

jQuery serait une masse de ballonnements inutiles pour une tâche aussi triviale. Pensez à utiliser si vous utilisez pour d'autres fins, mais est quelque chose comme tout ce que vous avez besoin ceci:

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

Que voulez-vous dire par

Sans passer par tableau

?

Vous pouvez simplement faire

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 est excentrique dans IE et un peu dans Opera: http://www.quirksmode.org/dom/w3c_core.html, j'essaie juste de l'éviter complètement. –

+0

acclamations - mis à jour maintenant –

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; 
})(); 

Avec jQuery:

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

+1 pour afficher également la version JQuery. Ouais, si c'est tout ce que vous voulez faire, JQuery est exagéré. Mais si vous avez d'autres validations, AJAX, etc., un test d'une ligne est difficile à battre. – GalacticCowboy

0

Si vous avez une grande quantité de cases à cocher t Si vous ne voulez pas passer en boucle pour tester, il pourrait être plus efficace d'utiliser cette approche.

var checked = 0; 

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

Ensuite, vous seriez en mesure de tester comme ça.

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