web-dev-qa-db-fra.com

jQuery: comment obtenir l'index d'un bouton radio coché

Je suis récemment tombé sur une réponse de StackOverflow qui donnait d'excellentes instructions sur comment obtenir la valeur d'un bouton radio coché à l'aide de jQuery :

var radioVal = $("#myFormID input:radio[name='radioFieldName']:checked").val();
alert('Selected radio button value = ' + radioVal);

Maintenant, j'essaie de trouver l'index de base zéro du bouton radio coché. Je pensais que ce serait relativement simple:

var radioIdx = $("#myFormID input:radio[name='radioFieldName']:checked").index();

Cependant, radioIdx renvoie toujours une valeur de -1. Des idées sur ce que je pourrais faire mal?

15
Mass Dot Net

Cela devrait marcher. Vous pouvez tout faire en une seule ligne mais je l'ai cassé pour en faciliter la lecture: 

var radioButtons = $("#myFormID input:radio[name='radioFieldName']");
var selectedIndex = radioButtons.index(radioButtons.find(':checked'));

EDIT: Vérifiez que votre sélecteur est correct. Décrivez-le étape par étape:

var radioButtons = $("#myFormID input:radio[name='radioFieldName']");

// this should contain the count of all your radio buttons
var totalFound = radioButtons.length;

// this should contain the checked one
var checkedRadioButton = radioButtons.find(':checked');

// this should get the index of the found radio button based on the list of all
var selectedIndex = radioButtons.index(checkedRadioButton);

Quelle étape ne produit pas la valeur attendue dans celles-ci?

EDIT: Pour montrer la solution finale

var radioButtons = $("#myFormID input:radio[name='radioFieldName']");
var selectedIndex = radioButtons.index(radioButtons.filter(':checked'));
29
Kelsey

Essayez d’utiliser la forme de index qui vous permet de spécifier un élément dans une collection et renvoie sa position relative dans la collection:

var radioIdx = $(":radio[name='radioFieldName']")
                    .index($(":radio[name='radioFieldName']:checked")); 

ou la version qui trouve le premier élément correspondant à un sélecteur se trouvant dans une autre collection et indique sa position dans la deuxième collection.

var radioIdx = $(":radio[name='radioFieldName']:checked")
                   .index(":radio[name='radioFieldName']");
4
tvanfosson

Il y a plusieurs options:

1) Énumérez la liste de boutons radio (sans le modificateur: vérifié) et vérifiez si elle est cochée; si c'est le cas, vous avez l'identifiant de l'élément dans le groupe.

2) Le meilleur moyen (imo) consiste simplement à associer des données à chaque élément et à extraire ces données. Donc, si vous attribuez à l'élément un attribut 'data-index' avec la valeur, vous pouvez simplement appeler 

$('#myFormID input:radio[name='radioFieldName']:checked').data('index')

Et avoir la valeur. 

2
Tejs

Bien que ce soit vieux, mais essayez ceci (en supposant que vous êtes dans la fonction de clic des boutons radio)

$('#myFormID input:radio[name=radioFieldName]').click(function(){
  var index = $('#myFormID input:radio[name=radioFieldName]').index(this);
  alert(index);
});
0
Obi

il retourne -1 car vous obtenez la valeur avant la vérification de tout radiobutton. Je pense que vous manquez votre auditeur et index vérifiés. Je viens de recevoir la même erreur, mais j'ai finalement trouvé la réponse, je reçois l'index avant que quoi que ce soit ne soit vérifié, vérifiez votre code, le code indiqué ci-dessus est correct.

0
Bhimbim

utilisez ceci

    alert($("input[name=checkname]:checked").map(function () {return this.value;}).get().join(","));
0
atabak