Wie erhalte ich den Wert des ausgewählten Optionsfelds?


264

Ich habe ein seltsames Problem mit meinem JS-Programm. Ich hatte das richtig funktioniert, aber aus irgendeinem Grund funktioniert es nicht mehr. Ich möchte nur den Wert des Optionsfelds (welches ausgewählt ist) finden und an eine Variable zurückgeben. Aus irgendeinem Grund kehrt es immer wieder zurück undefined.

Hier ist mein Code:

function findSelection(field) {
    var test = 'document.theForm.' + field;
    var sizes = test;

    alert(sizes);
        for (i=0; i < sizes.length; i++) {
            if (sizes[i].checked==true) {
            alert(sizes[i].value + ' you got a value');     
            return sizes[i].value;
        }
    }
}

submitForm::

function submitForm() {

    var genderS =  findSelection("genderS");
    alert(genderS);
}

HTML:

<form action="#n" name="theForm">

    <label for="gender">Gender: </label>
    <input type="radio" name="genderS" value="1" checked> Male
    <input type="radio" name="genderS" value="0" > Female<br><br>
    <a href="javascript: submitForm()">Search</A>
</form>

Antworten:


395

Sie können so etwas tun:

var radios = document.getElementsByName('genderS');

for (var i = 0, length = radios.length; i < length; i++) {
  if (radios[i].checked) {
    // do whatever you want with the checked radio
    alert(radios[i].value);

    // only one radio can be logically checked, don't check the rest
    break;
  }
}
<label for="gender">Gender: </label>
<input type="radio" name="genderS" value="1" checked="checked">Male</input>
<input type="radio" name="genderS" value="0">Female</input>

jsfiddle

Bearbeiten: Vielen Dank an HATCHA und jpsetung für Ihre Bearbeitungsvorschläge.


5
Das hat für jquery 1.7 funktioniert, aber jetzt lautet die korrekte Syntax für jQuery 1.9 $ ('input [name = "genderS"]: checked'). Val (); (entfernen Sie das @)
jptsetung

1
Ich glaube, die @Syntax war noch früher veraltet (jquery 1.2)
Tom Pietrosanti

@ TomPietrosanti Die Dokumentation scheint ein wenig veraltet zu sein. Jsfiddle.net/Xxxd3/608 funktioniert in <1.7.2, aber nicht in> 1.8.3. Unabhängig davon @sollte das auf jeden Fall entfernt werden
jbabey

Ja, es sieht so aus, als hätten sie dort etwas Abwärtskompatibilität gelassen, aber die Dokumente nicht entsprechend aktualisiert. Ich erinnere mich an ein paar Probleme, als sie einige veraltete Funktionen, die noch weit verbreitet waren, fallen ließen, also fügten sie wieder Unterstützung hinzu. Vielleicht ist das der Grund ...
Tom Pietrosanti

2
document.querySelector()sollte jetzt wahrscheinlich der empfohlene Ansatz in reinem JavaScript sein.
Dave

334

Dies funktioniert mit jedem Explorer.

document.querySelector('input[name="genderS"]:checked').value;

Dies ist eine einfache Möglichkeit, den Wert eines beliebigen Eingabetyps abzurufen. Sie auch nicht brauchen jQuery Pfad zu enthalten.


23
Die Verwendung von document.querySelector () ist eine reine Javascript-Antwort: developer.mozilla.org/en-US/docs/Web/API/document.querySelector
AdamJonR

8
Wenn Sie es in einer Variablen speichern und kein Radiobutton ausgewählt ist, wird der Browser angehalten. Konsole sagt: TypeError document.querySelector(...)ist null.
Rufen Sie mich

14
Das funktioniert nur, wenn einer ausgewählt ist. Sie sollten es also vorher überprüfen. var selector = document.querySelector('input[name="genderS"]:checked'); if(selector) console.log(selector.value);
Markus Zeller

Ich arbeite mit Vorlagen in Meteor, und dieser :checkedTrick hat mich total accountType = template.find("[name='optradio']:checked").value;
beeindruckt

Ich habe eine Unternehmensumgebung, in der es unter IE11 nicht konsistent funktioniert - eine Art Abwärtskompatibilitätsmodus.
Steve Black

36
document.forms.your-form-name.elements.radio-button-name.value

5
Dies funktioniert auch:document.forms.your-form-name.name-shared-by-radio-buttons.value
Web_Designer

7
Ich denke, die meisten Leute übersehen dies. Die akzeptierte Antwort funktioniert. Giorgos Tsakonas Antwort ist besser. Aber dies ist die grundsätzlich richtige Antwort. So funktionieren Optionsfelder tatsächlich. Beachten Sie, dass, wenn nichts ausgewählt wurde, eine leere Zeichenfolge zurückgegeben wird.
Mark Goldfain

@Web_Designer Sollte Ihr Kommentar nicht auch eine echte Antwort sein?
Ideogramm

Dies funktioniert nicht, wenn Ihr Funkeingang nicht in einer Form vorliegt. Ich denke daher nicht, dass dies eine bessere Antwort ist als die AbfrageSelector. Vielleicht sollten diese beiden zusammengeführt werden.
Tomáš Hübelbauer

19

Seit jQuery 1.8 lautet die korrekte Syntax für die Abfrage

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

Nicht $('input[@name="genderS"]:checked').val();mehr, was in jQuery 1.7 (mit dem @ ) funktionierte .


16

ECMAScript 6 Version

let genderS = Array.from(document.getElementsByName("genderS")).find(r => r.checked).value;

16

Die einfachste Lösung:

 document.querySelector('input[name=genderS]:checked').value

1
Aus zwei Gründen hochgestimmt: 1. Es funktioniert. 2. Es war keine lahme Antwort.
John

21
Dies ist eine genaue Kopie der Antwort von @Giorgos Tsakonas, die ein Jahr zuvor gegeben wurde.
T Nguyen

7

Versuche dies

function findSelection(field) {
    var test = document.getElementsByName(field);
    var sizes = test.length;
    alert(sizes);
    for (i=0; i < sizes; i++) {
            if (test[i].checked==true) {
            alert(test[i].value + ' you got a value');     
            return test[i].value;
        }
    }
}


function submitForm() {

    var genderS =  findSelection("genderS");
    alert(genderS);
    return false;
}

Eine Geige hier .


6

Bearbeiten: Wie von Chips_100 gesagt, sollten Sie verwenden:

var sizes = document.theForm[field];

direkt ohne Verwendung der Testvariablen.


Alte Antwort:

Sollte dir das nicht evalgefallen?

var sizes = eval(test);

Ich weiß nicht, wie das funktioniert, aber für mich kopieren Sie nur eine Zeichenfolge.


eval ist hier nicht die beste Option ... vielleicht möchten Sie var sizes = document.theForm[field];die erste Zuweisung sagen und löschen, verwenden Sie also keine testVariable mehr.
Dennis

Würde eval meines Wissens so funktionieren, wie es ist? Oder würde es nur mit funktionieren eval('var sizes=document.theForm.' + field)?
Michael Laffargue

Die eval Aussage in Ihrer Antwort var sizes = eval(test);würde so funktionieren (ich teste es nur in firebug).
Dennis

Das ist sinnvoller, aber in der Zeile, in der ich fieldKlammern eingefügt habe, wird der Fehler "Unerwartetes Token [" angezeigt. Irgendwelche Vermutungen warum?
Mkyong

4

Dies ist reines JavaScript, basierend auf der Antwort von @Fontas, aber mit Sicherheitscode, um eine leere Zeichenfolge zurückzugeben (und a zu vermeiden TypeError), wenn kein Optionsfeld ausgewählt ist:

var genderSRadio = document.querySelector("input[name=genderS]:checked");
var genderSValue = genderSRadio ? genderSRadio.value : "";

Der Code bricht folgendermaßen zusammen:

  • Zeile 1: Verweis auf das Steuerelement abrufen, dass (a) ein <input>Typ ist, (b) ein nameAttribut von hatgenderS hat und (c) überprüft wird.
  • Zeile 2: Wenn es ein solches Steuerelement gibt, geben Sie seinen Wert zurück. Ist dies nicht der Fall, geben Sie eine leere Zeichenfolge zurück. Die genderSRadioVariable ist wahr, wenn Zeile 1 das Steuerelement findet, und null / falsey, wenn dies nicht der Fall ist.

Verwenden Sie für JQuery die Antwort von @ jbabey und beachten Sie, dass das Optionsfeld zurückgegeben wird, wenn es nicht ausgewählt ist undefined.



3

Hier ist ein Beispiel für Radios, bei denen kein Attribut "Checked =" Checked "" verwendet wird

function test() {
var radios = document.getElementsByName("radiotest");
var found = 1;
for (var i = 0; i < radios.length; i++) {       
    if (radios[i].checked) {
        alert(radios[i].value);
        found = 0;
        break;
    }
}
   if(found == 1)
   {
     alert("Please Select Radio");
   }    
}

DEMO : http://jsfiddle.net/ipsjolly/hgdWp/2/ [ Klicken Sie auf Suchen, ohne ein Radio auszuwählen ]

Quelle: http://bloggerplugnplay.blogspot.in/2013/01/validateget-checked-radio-value-in.html


2

Hier ist eine gute Möglichkeit, den Wert des aktivierten Optionsfelds mit einfachem JavaScript abzurufen:

const form = document.forms.demo;
const checked = form.querySelector('input[name=characters]:checked');

// log out the value from the :checked radio
console.log(checked.value);

Quelle: https://ultimatecourses.com/blog/get-value-checked-radio-buttons

Verwenden dieses HTML:

<form name="demo">
  <label>
    Mario
    <input type="radio" value="mario" name="characters" checked>
  </label>
  <label>
    Luigi
    <input type="radio" value="luigi" name="characters">
  </label>
  <label>
    Toad
    <input type="radio" value="toad" name="characters">
  </label>
</form>

Sie können auch die Eigenschaft Array Find verwendenchecked , um das markierte Element zu finden:

Array.from(form.elements.characters).find(radio => radio.checked);

1

Mit einem reinen Javascript können Sie den Verweis auf das Objekt verarbeiten, das das Ereignis ausgelöst hat.

function (event) {
    console.log(event.target.value);
}

1

Nehmen wir an, Sie müssen verschiedene Zeilen von Optionsfeldern in einem Formular platzieren, die jeweils separate Attributnamen ('Option1', 'Option2' usw.), aber denselben Klassennamen haben. Möglicherweise benötigen Sie sie in mehreren Zeilen, in denen sie jeweils einen Wert basierend auf einer Skala von 1 bis 5 für eine Frage einreichen. Sie können Ihr Javascript so schreiben:

<script type="text/javascript">

    var ratings = document.getElementsByClassName('ratings'); // we access all our radio buttons elements by class name     
    var radios="";

    var i;
    for(i=0;i<ratings.length;i++){
        ratings[i].onclick=function(){
            var result = 0;
            radios = document.querySelectorAll("input[class=ratings]:checked");
            for(j=0;j<radios.length;j++){
                result =  result + + radios[j].value;
            }
            console.log(result);
            document.getElementById('overall-average-rating').innerHTML = result; // this row displays your total rating
        }
    }
</script>

Ich würde auch die endgültige Ausgabe in ein verstecktes Formularelement einfügen, das zusammen mit dem Formular gesendet werden soll.


1
 document.querySelector('input[name=genderS]:checked').value

0

Wenn Sie Ihrem Formularelement () eine ID zuweisen können, kann dieser Weg als sichere Alternative angesehen werden (insbesondere, wenn der Name des Funkgruppenelements im Dokument nicht eindeutig ist):

function findSelection(field) {
    var formInputElements = document.getElementById("yourFormId").getElementsByTagName("input");
    alert(formInputElements);
        for (i=0; i < formInputElements.length; i++) {
        if ((formInputElements[i].type == "radio") && (formInputElements[i].name == field) && (formInputElements[i].checked)) {
            alert(formInputElements[i].value + ' you got a value');     
            return formInputElements[i].value;
        }
    }
}

HTML:

<form action="#n" name="theForm" id="yourFormId">

-3
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 1">
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 2">
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 3">
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 4"> 

etc dann einfach benutzen

  $("#rdbExamples:checked").val()

Oder

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.