2010-09-23 9 views
4

Sur mon formulaire, j'ai un ensemble de boutons radio. Voici la marque vers le haut:La validation d'un bouton radio est vérifiée avec jQuery

<div class="optionHolder"> 
    <p class="optionName">Format</p> 
    <div class="option checked"> 
     <input type="radio" name="fileType" value="avi" /> 
     <img src="images/avi.png" alt="" /> 
     <label>AVI</label> 
    </div> 
    <div class="option"> 
     <input type="radio" name="fileType" value="mov" /> 
     <img src="images/mov.png" alt="" /> 
     <label>MOV</label> 
    </div> 
    <div class="option"> 
     <input type="radio" name="fileType" value="mp4" /> 
     <img src="images/mp4.png" alt="" /> 
     <label>MP4</label> 
    </div> 
    <div class="option"> 
     <input type="radio" name="fileType" value="mp3" /> 
     <img src="images/mp3.png" alt="" /> 
     <label>MP3</label> 
     </div> 
</div> 

Lorsque le formulaire est soumis, je veux vérifier que l'un d'entre eux est cochée. Quelle est la meilleure façon d'y parvenir? Je pensais à les boucler tous et faire un drapeau à définir si l'un d'entre eux est vérifié, puis vérifier le drapeau après la boucle et si c'est faux jeter une erreur.

Toute aide est appréciée, à votre santé.

Répondre

0

Vous pouvez vérifier si le nom du bouton radio coché retourne une valeur dans jQuery:

if($("input[@name='fileType']:checked").val() != null){ 
    // button checked 
} 
+0

-1 Non, 'val()' 'rendement null' quand aucun élément se trouvent, et certainement' null! == "" ' –

+0

Mon mauvais, sous la direction de montrer de manière correcte de vérifier. –

+0

Pourquoi le null est-il toujours là? –

4

Essayez le plugin jQuery Validation. Il peut faire beaucoup pour vous et être très utile pour beaucoup de formes différentes. Si vous voulez le faire très simplement:

if($("input[name=fileType]:checked").length > 0) { 
    //Is Valid 
} 
+0

Battez-moi de 20 secondes. :) – janosrusiczki

+0

@kitsched Des questions comme celles-ci reçoivent une réponse très rapide! – ICodeForCoffee

1

Je pense que $('input[name=fileType]:checked').length fera l'affaire.

5

Démo

http://jsfiddle.net/Vq2jB/2/

var isChecked = jQuery("input[name=fileType]:checked").val(); 
+0

Votre chemin fonctionne, mais si rien n'est sélectionné, vous obtenez undefined au lieu de false pour isChecked. Si je vais à tous les var isChecked, je veux que ce soit vrai ou faux. Pas vrai ou indéfini. Oui, si je pars si isChecked ça fonctionne de la même manière, mais ça me semble légèrement décalé quand même. – ICodeForCoffee

+0

J'ai ajouté une démo et résolu ce problème. –

19

Vous pouvez utiliser le length et equal attribute selector avec :checked sélecteur de filtre comme ceci:

if ($("input[name='fileType']:checked").length > 0){ 
    // one ore more checkboxes are checked 
} 
else{ 
// no checkboxes are checked 
} 
+1

Vous devez vérifier la longueur pour être '> 0', pas seulement défini –

+0

@Josh Stodola: Vous devriez l'avoir testé avant de voter en bas :) – Sarfraz

+0

Je l'ai fait. Et je n'ai pas voté. Vous devez le comparer à zéro. Vérifiez simplement si (.length) vérifie si elle est définie ou non. Lorsqu'il est défini sur 0, il est toujours défini. Ce code ne fonctionnera pas de manière cohérente. –

2

Essayez:

var checkbox = $("input[@name='fileType']:checked"); 

if(checkbox.length > 0) { 
    alert(checkbox.val()); // checkbox value 
} else { 
    alert('Please select a format'); // error 
} 

http://jsfiddle.net/wE4RD/

2

vraiment vieux, je sais. Si une sélection de radio n'est pas sélectionnée, elle renvoie "non défini", et non "0". Dans mon exemple, je déclare une variable avec la valeur des boutons radio. Si cette valeur n'est pas définie, le javascript renvoie false.

gender = $('input[name=gender]:checked').val(); 

if(typeof gender === 'undefined'){ 
    alert('Do not move on'); 
    $('input[name=gender]').css('box-shadow', '0 0 2px 0 red'); 
    return false; 
}  
Questions connexes