2009-07-22 6 views
15

En jQuery, je souhaite sélectionner tous les groupes de boutons radio dans lesquels aucun bouton n'est coché.jQuery et groupes de boutons radio

Ou existe-t-il un moyen de sélectionner tous les groupes de boutons radio et de parcourir les groupes?

J'ajoute dynamiquement N groupes de boutons radio à une page et je ne saurai pas, à la main, quels seront les noms des groupes de boutons radio.

+0

pouvez-vous mettre un échantillon html? –

Répondre

34

Pour trouver tous les groupes radio:

var radio_groups = {} 
$(":radio").each(function(){ 
    radio_groups[this.name] = true; 
}) 

pour trouver quel groupe radio a vérifié les boîtes de radio et qui n'a pas:

for(group in radio_groups){ 
    if_checked = !!$(":radio[name='"+group+"']:checked").length 
    alert(group+(if_checked?' has checked radios':' does not have checked radios')) 
} 
+2

qu'est-ce que !! représente et pourquoi? –

+0

[Duble PAS, il convertit la valeur booléenne deux fois de suite donc '!! true = true'] (http://stackoverflow.com/questions/1406604/what-does-the-operator-double-exclamation-point- mean-in-javascript/1406618 # 1406618) –

+0

Je sais que c'est vieux, mais cela m'a beaucoup aidé! Je voulais juste un moyen simple de m'assurer que chacun de mes groupes de boutons radio a été sélectionné, et le voici. – LittleTreeX

0

Prise en charge de plusieurs groupes et pré-cochées.

$('input').click(function() { 
    var $t = $(event.target); 
    if ($t.hasClass('checked')) $t.removeAttr('checked'); 
    else $('input[type="radio"][name="' + $t.prop('name') + '"]').not($t).removeClass('checked'); 
    $t.toggleClass('checked'); 
}).filter(':checked').addClass('checked');​ 

`` `

Preuve: http://jsfiddle.net/abrkn/PGW2Z/

0

Pour sélectionner toutes les radios par nom de groupe et obtenir uniquement la liste des noms différents:

function selectRadioByGroupName() { 
     return $.unique($('input:radio').map(function(index, element) { 
      return this.name; 
     })); 
    } 

Un exemple extrait:

function selectRadioByGroupName() { 
 
    return $.unique($('input:radio').map(function(index, element) { 
 
    return this.name; 
 
    })); 
 
} 
 

 

 

 
$(function() { 
 
    selectRadioByGroupName().each(function(index, element) { 
 
    $('body').append($('<p>First Group name is: ' + element + '</p>')); 
 
    }); 
 
});
<script src="https://code.jquery.com/jquery-1.12.1.min.js"></script> 
 

 
<form action=""> 
 
    <p> 
 
     Q1: 
 
    </p> 
 
    <input type="radio" name="gender" value="male"> Male<br> 
 
    <input type="radio" name="gender" value="female"> Female<br> 
 
    <input type="radio" name="gender" value="other"> Other 
 
    <br /> 
 
    <p> 
 
     Q2: 
 
    </p> 
 
    <input type="radio" name="status" value="male"> Single<br> 
 
    <input type="radio" name="status" value="female"> Married<br> 
 
    <input type="radio" name="status" value="other"> Other 
 
    <br /> 
 
    <input type="button" name="submit_id" value="Submit" onclick="submitAnswers()"> 
 
</form>
Après avoir obtenu les différents noms de groupes, il est possible de les faire défiler.

Questions connexes