2012-11-05 2 views
0

Je souhaite valider mon formulaire à l'aide de jQuery. Il a des groupes de boutons radio.Valider les boutons radio avec jQuery sur submit

J'ai trouvé plusieurs solutions pour un seul groupe de boutons radio ou de solutions, où vous devez spécifiquement dire quels noms de groupe il y a.

Comme ici: Validate radio buttons with jquery?

Le problème est que la forme est générée lors de l'exécution. Les questions sont sauvegardées dans un fichier txt (ne demandez pas, c'est un exercice scolaire). Le code HTML généré ressemble à quelque chose comme ceci:

<p>What&#039;s your gender? 

<input type="radio" name="gender" value="m" />Male 
<input type="radio" name="gender" value="f" />Female 

</p> 

<p> 

How satisfied are you with out support? 
<input type="radio" name="satisfaction" value="0%" />Not at all 
<input type="radio" name="satisfaction" value="25%" />Not very much 
<input type="radio" name="satisfaction" value="75%" />It was ok 
<input type="radio" name="satisfaction" value="100% />It was very satisfying 

</p> 

Le fichier js est généré à l'aide Brindille, il serait possible de faire une boucle par tous les groupes de boutons radio, mais je voudrais éviter cela, si c'est possible.

+0

Vous ne pouvez pas obtenir beaucoup mieux qu'itérer sur chaque groupe –

+0

Ne pouvez-vous pas au moins obtenir tous les noms de groupe directement dans jquery, plutôt que de générer des tonnes de code jquery? Je peux donc faire le foreach directement dans jQuery. Merci pour votre effort – NSAddict

Répondre

1

Vous devez ajouter tous les groupes premier (chargement de la page serait bien, mais assurez-vous que le tableau de groupe est portée mondiale), puis validez chaque groupe individuellement lorsque votre formulaire est transmis/bouton cliquez sur

var groups = []; 
$(function() { 
    $("input[type=radio][name]").each(function() { 
     // Add the unique group name to the array 
     groups[$(this).attr("name")] = true; 
    }); 
}); 
$("button").click(function() { 
    $.each(groups, function(i, o) { 
     // For each group, check at least one is checked 
     var isValid = $("input[name='"+i+"']:checked").length; 
     alert(i + ": " + isValid); 
    }); 
}); 
+0

groupes est un tableau vide, lorsque le formulaire est soumis. Mais la fonction est en cours d'exécution. Une idée pourquoi? Le chaque bloc fonctionne également. – NSAddict

+0

J'ai compris, merci. – NSAddict

0

Je l'ai travailler comme cela

var groups = []; 
$(function() { 
    $("input[type=radio][name]").each(function() { 
     // Add the unique group name to the array 
     if (groups[groups.length - 1] != $(this).attr("name")) groups.push($(this).attr("name")); 
    }); 
}); 
$('form').submit(function() { 
    var isValid = true; 

    $.each(groups, function(i, o) { 
     // For each group, check at least one is checked 
     if (isValid) isValid = $("input[name='"+o+"']:checked").length; 
    }); 

    if (!isValid) return false; 

    return true; 
}); 

Merci à Blade0rz!