2014-05-16 5 views
0

! Bonjour,javascript éviter soumettre si case non cochée

J'ai un certain nombre de cases à cocher générées avec PHP. Il y a un bouton de validation. Je veux empêcher l'utilisateur de valider le formulaire sans cocher au moins une case.

J'ai ce code

var checkboxes = document.getElementsByName('date[]'); 
var btn = document.getElementById('Submit'); 
date.onchange = function(){ 
    for (var i=0;i<checkboxes.length;i++) 
    { 
     if(checkboxes[i].checked) 
     { 
     btn.disabled = false; 
     } 
     else 
     { 
     btn.disabled = true; 
     } 
    } 
} 
<form> 
.... 
<table> 
    <tr id="{{ cpt }}"> 
     <td><input type="checkbox" class="date" id="date" name="date[]" 
          checked value="{{ jdv.day }}"></td> 
     <td>{{ jdv.day }}</td> 
    </tr> 
</table> 
</form> 

Mais il ne fonctionne que pour la première case!

pouvez-vous m'aider?

Merci

+1

Où avez-vous défini 'date' et pouvons-nous aussi voir votre code HTML? – putvande

Répondre

-1

Vous feriez mieux de faire des contre which'll nombre cochés cases à cocher et à la fin le comparer avec le nombre de num minimum de cases cochées

+0

_at au moins 1 case à cocher – putvande

-1

vous devez garder une variable, ce qui évite que les autres cases à cocher les résultats se chevauchent les uns les autres.

Quelque chose comme:

var toShow = true; 
var checkboxes = document.getElementsByName('date[]'); 
var btn = document.getElementById('Submit'); 
date.onchange = function(){ 
for (var i=0;i<checkboxes.length && toShow;i++) { 
    if(!checkboxes[i].checked) 
    { 
     toShow = false; 
    } 
} 
if(toShow) 
    btn.disabled = false; 
} else 
{ 
    btn.disabled = true; 
} 
+0

La première case à cocher non cochée sera définie sur Afficher à false, arrêter la boucle et définir le bouton sur désactivé. Cela signifie que si une case à cocher est cochée, elle sera ignorée. –

+0

Merci, je viens de l'essayer mais ça ne marche pas :(Rien ne se passe quand je clique dans les cases Mon bouton n'est pas désactivé – user2203384

+0

Oh, désolé .. J'ai suivi votre code et maintenant je vois que l'idée n'est pas ' Vous devez inverser l'idée Réglez "toShow = false" et "if (checkboxes [i] .checked) -> toShow = true" Cela fera que, si au moins un est coché, il active le bouton (et mettre! ToShow dans le temps) Hugs – DropDaCode

0

Votre script mis button.disabled = true; pour chaque case à cocher est cochée ... cela signifie que si vous cochez une case que le dernier, ce sera toujours mis à true désactivé à la fin.

ajouter à votre fonction après btn.disabled = false;

return true; 

résultant dans ce code:

var checkboxes = document.getElementsByName('date[]'); 
var btn = document.getElementById('Submit'); 
date.onchange = function(){ 
    for (var i=0;i<checkboxes.length;i++) 
    { 
     if(checkboxes[i].checked) 
     { 
     btn.disabled = false; 
     return true; 
     } 
     else 
     { 
     btn.disabled = true; 
     } 
    } 
} 

cela arrêtera votre fonction une fois qu'il détecte la première case cochée et empêcher les suivants de la substitution de la disabled propriété de votre bouton.

+0

Merci pour votre réponse, cela fonctionne seulement pour la première case à cocher Je vais mettre mon html: oops, pas ici – user2203384

Questions connexes