web-dev-qa-db-de.com

jQuery: So erhalten Sie den Index eines aktivierten Optionsfelds

Ich bin kürzlich auf eine StackOverflow-Antwort gestoßen, die hervorragende Anweisungen zu gab, wie der Wert eines aktivierten Optionsfelds mit jQuery abgerufen werden kann:

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

Jetzt versuche ich, den nullbasierten Index des aktivierten Optionsfelds zu finden. Ich dachte, es wäre relativ einfach:

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

radioIdx gibt jedoch immer einen Wert von -1 zurück. Irgendwelche Ideen, was ich falsch machen könnte?

15
Mass Dot Net

Das sollte funktionieren. Sie könnten alles in einer Zeile machen, aber ich habe es getrennt, um das Lesen zu erleichtern: 

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

BEARBEITEN: Stellen Sie sicher, dass Ihre Auswahl korrekt ist. Zerlegen Sie es Schritt für Schritt:

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);

Welcher Schritt erzeugt in diesen nicht den erwarteten Wert?

EDIT: Endlösung anzeigen

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

Versuchen Sie es mit der Form index , mit der Sie ein Element in einer Auflistung angeben können und dessen relative Position in der Auflistung zurückgeben:

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

oder die Version, die das erste Element findet, das mit einem Selektor in einer anderen Sammlung übereinstimmt, und meldet seine Position in der zweiten Sammlung.

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

Es gibt verschiedene Möglichkeiten:

1) Aufzählen durch die Optionsfeld-Liste (aka ohne den aktivierten Modifikator) und testen, ob sie markiert ist; Wenn ja, haben Sie die ID des Elements in der Gruppe.

2) Der bessere Weg (imo) besteht darin, jedem Element einfach einige Daten zuzuordnen und diese Daten abzurufen. Wenn Sie dem Element also ein 'Datenindex'-Attribut mit dem Wert geben, können Sie es einfach aufrufen 

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

Und den Wert haben. 

2
Tejs

Dies ist zwar alt, aber versuchen Sie dies (vorausgesetzt, Sie befinden sich innerhalb der Klick-Funktion der Optionsfelder)

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

es wird -1 zurückgegeben, weil Sie den Wert erhalten, bevor ein Radiobutton geprüft wurde. Ich denke, Sie vermissen Ihren Hörer und den Index, die überprüft wurden. Ich habe gerade den gleichen Fehler erhalten, aber endlich die Antwort gefunden. Ich bekomme den Index, bevor etwas überprüft wurde. Bitte überprüfen Sie Ihre Code-Anordnung.

0
Bhimbim

benutze das

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