Wie erhalte ich den Wert des ausgewählten Optionsfelds?


316

Ich möchte den ausgewählten Wert aus einer Gruppe von Optionsfeldern abrufen.

Hier ist mein HTML:

<div id="rates">
  <input type="radio" id="r1" name="rate" value="Fixed Rate"> Fixed Rate
  <input type="radio" id="r2" name="rate" value="Variable Rate"> Variable Rate
  <input type="radio" id="r3" name="rate" value="Multi Rate" checked="checked"> Multi Rate  
</div>

Hier ist meine .js:

var rates = document.getElementById('rates').value;
var rate_value;
if(rates =='Fixed Rate'){
    rate_value = document.getElementById('r1').value;

}else if(rates =='Variable Rate'){
    rate_value = document.getElementById('r2').value;

}else if(rates =='Multi Rate'){
    rate_value = document.getElementById('r3').value;
}  

document.getElementById('results').innerHTML = rate_value;

Ich werde immer undefiniert.


50
Sie verwenden jQuery hier nicht, aber wenn Sie es jemals wollten, können Sie dies verwenden:$("input[type='radio'][name='rate']:checked").val();
GJK

Warum können Sie dieses Objekt nicht inspizieren? Wie auch immer Sie brauchen.checked
Amol M Kulkarni

Mögliches Duplikat des
GOTO 0

Ich bin mir nicht sicher, ob dies erforderlich ist oder nicht, aber es ist eine gute Angewohnheit, Optionsfelder in einen <form></form>Behälter zu legen .
Kamil

Antworten:


239
var rates = document.getElementById('rates').value;

Das Ratenelement ist a div, hat also keinen Wert. Dies ist wahrscheinlich, woher das undefinedkommt.

Die checkedEigenschaft gibt an, ob das Element ausgewählt ist:

if (document.getElementById('r1').checked) {
  rate_value = document.getElementById('r1').value;
}

229
In jquery wäre es$("input[name=rate]:checked").val()
Kamran Ahmed

1
Ich verstehe nicht, gibt es zwei Elemente mit derselben ID?
Mzalazar

3
@mzalazar Nein, jedes Optionsfeld hat eine eigene ID, aber alle haben denselben Namen. Dadurch werden sie in eine Gruppe eingeteilt. Wenn Sie also eine auswählen, wird die Auswahl aufgehoben. Mit der Antwort von Kamran Ahmed können Sie überprüfen, welches der Optionsfelder in der Gruppe ausgewählt ist, und nur den Wert des ausgewählten (aktivierten) Kontrollkästchens abrufen.
Broco

4
Der Code von mahdavipanah direkt über (mit [checked]) sucht nach dem Attribut (dh dem Anfangszustand). Sie sollten stattdessen verwenden :checked, das nach der Eigenschaft sucht (dh nach dem aktuellen Status) und das fast immer das ist, was Sie wollen.
Gras Double

5
In Javascript wäre esdocument.querySelectorAll("input[name=rate]:checked")[0].value
Vincent McNabb

519

Dies funktioniert in IE9 und höher und allen anderen Browsern.

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

13
Natürlich müssten Sie prüfen, ob querySelector null zurückgibt. Dies ist der Fall, wenn kein Optionsfeld aktiviert ist.
Robert

18
@KamranAhmed: Ihre jQuery-Lösung ist mit viel höheren Kosten verbunden.

5
ParthikGosar: IE8 unterstützt den :checkedSelektor nicht.

14
Beachten Sie, dass die Anführungszeichen ratenicht erforderlich sind.
mbomb007

1
@KamranAhmed, bis Sie das oben genannte Profil erstellen und / oder die Implementierung hinter dem Aufruf überprüfen können, können Sie nicht mehr über die Leistung des oben genannten sagen als über jeden anderen Oneliner, der nativen Code aufruft. Wir haben nicht genügend Informationen, um zu spekulieren, wie der Browser es schafft, :checkedElemente zu finden - vielleicht hat er alles "gehasht und zwischengespeichert" und es ist eine O(1)Operation. Wenn Sie kein Profil erstellt haben, um anzuzeigen, dass die Abfragezeit mit der Anzahl der Elemente auf der Seite zunimmt, oder wenn Sie den dahinter stehenden Browser-Quellcode nicht verstehen, können Sie dies nicht feststellen.
Amn

144

Sie können den Wert mithilfe der checkedEigenschaft abrufen.

var rates = document.getElementsByName('rate');
var rate_value;
for(var i = 0; i < rates.length; i++){
    if(rates[i].checked){
        rate_value = rates[i].value;
    }
}

13
Da nur ein Funkgerät überprüft werden kann, würde ich normalerweise erwarten, dass eine Anweisung breakoder returninnerhalb des ifBlocks zusätzliche Durchgänge durch die Schleife stoppt. Ein kleiner Punkt, aber guter Stil.
RobP

1
Dies ist die sauberste Vanille-Implementierung für diese Frage. Ein großes Lob!
SeaWarrior404

37

Für Sie Menschen, die am Rande leben:

Es gibt jetzt eine sogenannte RadioNodeList . Wenn Sie auf die value-Eigenschaft zugreifen, wird der Wert der aktuell überprüften Eingabe zurückgegeben. Dadurch entfällt die Notwendigkeit, zuerst die "überprüfte" Eingabe herauszufiltern, wie wir in vielen der veröffentlichten Antworten sehen.

Beispielformular

<form id="test">
<label><input type="radio" name="test" value="A"> A</label>
<label><input type="radio" name="test" value="B" checked> B</label>
<label><input type="radio" name="test" value="C"> C</label>
</form>

Um den überprüften Wert abzurufen, können Sie Folgendes tun:

var form = document.getElementById("test");
alert(form.elements["test"].value);

Die JSFiddle, um es zu beweisen: http://jsfiddle.net/vjop5xtq/

Bitte beachten Sie, dass dies in Firefox 33 implementiert wurde (alle anderen wichtigen Browser scheinen dies zu unterstützen). Ältere Browser benötigen ein Polfyill, RadioNodeListdamit dies ordnungsgemäß funktioniert


1
form.elements["test"].valuefunktioniert sehr gut in Chrome [Version 49.0.2623.87 m].
Evan Hu

Es muss eine Form sein, kann zB kein div verwenden. Ansonsten funktioniert dies in FF 71.0.
Andrew

16

Diejenige, die für mich gearbeitet hat, ist unten von api.jquery.com angegeben.

HTML

<input type="radio" name="option" value="o1">option1</input>
<input type="radio" name="option" value="o2">option2</input>

JavaScript

var selectedOption = $("input:radio[name=option]:checked").val()

Die Variable selectedOption enthält den Wert des ausgewählten Optionsfelds (dh) o1 oder o2


11

Eine andere (anscheinend ältere) Option ist die Verwendung des Formats: "document.nameOfTheForm.nameOfTheInput.value;" zB document.mainForm.rads.value;

document.mainForm.onclick = function(){
    var radVal = document.mainForm.rads.value;
    result.innerHTML = 'You selected: '+radVal;
}
<form id="mainForm" name="mainForm">
    <input type="radio" name="rads" value="1" />
    <input type="radio" name="rads" value="2" />
    <input type="radio" name="rads" value="3" />
    <input type="radio" name="rads" value="4" />
</form>
<span id="result"></span>

Sie können auf das Element anhand seines Namens in einem Formular verweisen. Ihr ursprünglicher HTML-Code enthält jedoch kein Formularelement.

Geige hier (funktioniert in Chrome und Firefox): https://jsfiddle.net/Josh_Shields/23kg3tf4/1/


1
Dies ist das viel ältere Legacy-DOM-Format und sollte eigentlich nicht mehr verwendet werden, da es auf bestimmte Elemente beschränkt ist und nicht mit den aktuellen Standards Schritt hält.
j08691

@ j08691 Ah okay, danke, dass du mich informiert hast. Dies ist eines der Dinge, die ich in einer Universitätsklasse gelernt habe. Es ist wahrscheinlich besser, nichts von dort zu vertrauen und stattdessen nur Online-Referenzen zu verwenden.
JHS

6
"... hält nicht mit den aktuellen Standards Schritt." ist kein überzeugendes Argument. Bitte erläutern Sie. Wenn es funktioniert, funktioniert es. Es sind auch weniger Zeilen als die akzeptierte Antwort, die nur bestimmen, ob die ausgewählte Option "Festpreis" ist.
Nullen und Einsen

Die obige Geige scheint mit dem Safari-Browser (7.1.4) nicht zu funktionieren. Der Wert wird als undefiniert angezeigt. Das Ändern der Optionsfeldzustände hat keinen Einfluss darauf.
Stuart R. Jefferys

Ja, dies funktioniert auch nicht mit dem Edge-Browser (40.15063.0.0). Wenn sie auf diese Weise veraltet sind, erscheint dies seltsam, da dieser Weg einfacher und sinnvoller ist, da Optionsfelder nach ihrer Natur gruppiert sind. Die meisten anderen Antworten sehen so aus, als würden sie Kontrollkästchen aktivieren.
Mikato

10

Verwenden Sie document.querySelector ('Eingabe [Typ = Radio]: Aktiviert'). Value; Um den Wert des ausgewählten Kontrollkästchens zu erhalten, können Sie andere Attribute verwenden, um den Wert wie Name = Geschlecht usw. zu erhalten. Bitte gehen Sie das folgende Snippet durch. Es wird Ihnen definitiv helfen.

Lösung

document.mainForm.onclick = function(){
    var gender = document.querySelector('input[name = gender]:checked').value;
    result.innerHTML = 'You Gender: '+gender;
}
<form id="mainForm" name="mainForm">
    <input type="radio" name="gender" value="Male" checked/>Male
    <input type="radio" name="gender" value="Female" />Female
    <input type="radio" name="gender" value="Others" />Others
</form>
<span id="result"></span>

Danke


7

HTML QUELLTEXT:

<input type="radio" name="rdoName" value="YES"/> <input type="radio" name="rdoName" value="NO"/>

JQUERY CODE:

var value= $("input:radio[name=rdoName]:checked").val();

$("#btnSubmit").click(function(){
var value=$("input:radio[name=rdoName]:checked").val();
console.log(value);
alert(value);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="radio" name="rdoName" value="YES"/> YES
<input type="radio" name="rdoName" value="NO"/> NO
<br/>
<input type="button"id="btnSubmit"value="Which one Selected"/>

Sie erhalten

value="YES" //if checked Radio Button with the value "YES"
value="NO" //if checked Radio Button with the value "NO"

5

In Javascript können wir die Werte erhalten, indem wir die IDs " getElementById()" in dem oben angegebenen Code verwenden, der den Namen und nicht die ID enthält, sodass Sie ihn wie folgt ändern können

if (document.getElementById('r1').checked) {
  rate_value = document.getElementById('r1').value;
}

Verwenden Sie diesen rate_value gemäß Ihrem Code


5

Etwa ein Jahr ist vergangen, seit die Frage gestellt wurde, aber ich hielt eine wesentliche Verbesserung der Antworten für möglich. Ich finde das Skript am einfachsten und vielseitigsten, da es prüft, ob eine Schaltfläche überprüft wurde und wenn ja, welchen Wert sie hat:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Check radio checked and its value</title>
</head>
<body>

    <form name="theFormName">
        <input type="radio" name="theRadioGroupName" value="10">
        <input type="radio" name="theRadioGroupName" value="20">
        <input type="radio" name="theRadioGroupName" value="30">
        <input type="radio" name="theRadioGroupName" value="40">
        <input type="button" value="Check" onclick="getRadioValue('theRadioGroupName')">
    </form>

    <script>
        function getRadioValue(groupName) {
            var radios = theFormName.elements[groupName];
            window.rdValue; // declares the global variable 'rdValue'
            for (var i=0; i<radios.length; i++) {
                var someRadio = radios[i];
                if (someRadio.checked) {
                    rdValue = someRadio.value;
                    break;
                }
                else rdValue = 'noRadioChecked';
            }
            if (rdValue == '10') {
                alert('10'); // or: console.log('10')
            }
            else if (rdValue == 'noRadioChecked') {
                alert('no radio checked');
            }
        }
    </script>
</body>
</html>

Sie können die Funktion auch in einer anderen Funktion aufrufen:

function doSomething() {
    getRadioValue('theRadioGroupName');
    if (rdValue == '10') {
        // do something
    }
    else if (rdValue == 'noRadioChecked') {
        // do something else
    }  
} 

5

Angenommen, Ihr Formularelement wird myFormunten von einer Variablen referenziert und Ihre Optionsfelder haben den Namen "Mein-Optionsfeld-Gruppenname". Das Folgende ist rein JavaScript- und standardkonform (obwohl ich nicht überprüft habe, dass es überall verfügbar ist ):

myForm.elements.namedItem("my-radio-button-group-name").value

Das Obige ergibt den Wert eines aktivierten (oder ausgewählten, wie es auch genannt wird) Optionsfeldelements, falls vorhanden oder auf nullandere Weise. Der Kern der Lösung ist die namedItemFunktion, die speziell mit Optionsfeldern funktioniert.

Siehe HTMLFormElement.elements , HTMLFormControlsCollection.namedItem und insbesondere RadioNodeList.value , da namedItem normalerweise ein RadioNodeListObjekt zurückgegeben wird.

Ich verwende MDN, weil man damit zumindest weitgehend die Einhaltung von Standards verfolgen kann und weil es einfacher zu verstehen ist als viele WhatWG- und W3C-Veröffentlichungen.


Als ich die Antwort schrieb, überflog ich vorhandene Antworten und sah nichts, was dem ähnelte, was ich teilen wollte. Jetzt sehe ich, dass ich mindestens zwei ähnliche Lösungen verpasst habe. Zwar hat niemand seinen Code-Vorschlag mit der von mir verwendeten Syntax geschrieben, aber die allgemeine Idee ist dieselbe. Zu Ihrer Information. Es geht darum, den Verweis auf a zu erhaltenRadioNodeList durch etwas wie form.elements[name]oder form[name](vielleicht eine Spekulation) oder durch meine obige Syntax zu erhalten.
Amn

3

Wenn Sie ein Optionsfeld mehrmals direkt aufrufen, erhalten Sie den Wert der Taste FIRST und nicht der Taste CHECKED. Anstatt Optionsfelder zu durchlaufen, um zu sehen, welches aktiviert ist, rufe ich lieber eine onclickJavascript-Funktion auf, die eine Variable festlegt, die später nach Belieben abgerufen werden kann.

<input type="radio" onclick="handleClick(this)" name="reportContent" id="reportContent" value="/reportFleet.php" >

was ruft:

var currentValue = 0;
function handleClick(myRadio) {
    currentValue = myRadio.value;
    document.getElementById("buttonSubmit").disabled = false; 
}

Ein zusätzlicher Vorteil ist, dass ich Daten behandeln und / oder auf die Überprüfung einer Schaltfläche reagieren kann (in diesem Fall die Schaltfläche SUBMIT aktivieren).


5
Sie sollten das onchangeEreignis stattdessen binden, falls der Benutzer eine Tastatur verwendet.
John Dvorak

2

Eine Verbesserung gegenüber den zuvor vorgeschlagenen Funktionen:

function getRadioValue(groupName) {
    var _result;
    try {
        var o_radio_group = document.getElementsByName(groupName);
        for (var a = 0; a < o_radio_group.length; a++) {
            if (o_radio_group[a].checked) {
                _result = o_radio_group[a].value;
                break;
            }
        }
    } catch (e) { }
    return _result;
}

2

Ich gehe dieses Problem mit reinem Javascript an, indem ich den überprüften Knoten finde, seinen Wert finde und ihn aus dem Array heraushole.

var Anodes = document.getElementsByName('A'),
    AValue = Array.from(Anodes)
       .filter(node => node.checked)
       .map(node => node.value)
       .pop();
console.log(AValue);

Beachten Sie, dass ich mit Pfeil Funktionen . In dieser Geige finden Sie ein funktionierendes Beispiel.


Ich würde einen tagName === 'INPUT'Scheck hinzufügen , um sicherzustellen, dass Sie nicht an anderen Tags als arbeiten input.
Aternus


1

Sie können das .find()markierte Element auswählen:

var radio = Array.from(document.querySelectorAll('#rate input'))

var value = radio.length && radio.find(r => r.checked).value

1
Ich kannte Array.find nicht, ich liebe es! Dies würde jedoch brechen, wenn kein Element aktiviert ist.
Pongi

0
<form id="rates">
  <input type="radio" name="rate" value="Fixed Rate"> Fixed
  <input type="radio" name="rate" value="Variable Rate"> Variable
  <input type="radio" name="rate" value="Multi Rate" checked> Multi
</form>

dann...

var rate_value = rates.rate.value;

Können Sie erklären, wie dies die Frage beantwortet?
Soundslikeodd

" Den ausgewählten Wert aus einer Gruppe von Optionsfeldernrates.rate.valuerates.value
abrufen

Dies ist eine richtige Antwort. document.getElementById("rates").rate.value[oder]document.forms[0].rate.value
Atika

0

Wert anhand der ID prüfen:

var CheckedValues = ($("#r1").is(':checked')) ? 1 : 0;

0

Ich habe die Funktion jQuery.click verwendet, um die gewünschte Ausgabe zu erhalten:

$('input[name=rate]').click(function(){
  console.log('Hey you clicked this: ' + this.value);

  if(this.value == 'Fixed Rate'){
    rate_value = $('#r1').value;
  } else if(this.value =='Variable Rate'){
   rate_value = $('#r2').value;
  } else if(this.value =='Multi Rate'){
   rate_value = $('#r3').value;
  }  

  $('#results').innerHTML = rate_value;
});

Ich hoffe es hilft.


0

Wenn sich die Schaltflächen in einem Formular
var myform = new FormData(getformbywhatever); myform.get("rate");
befinden, ist QuerySelector oben eine bessere Lösung. Diese Methode ist jedoch leicht zu verstehen, insbesondere wenn Sie keine Ahnung von CSS haben. Außerdem haben Eingabefelder wahrscheinlich sowieso eine Form.
Nicht überprüft, es gibt andere ähnliche Lösungen, entschuldigen Sie die Wiederholung


0
var rates = document.getElementById('rates').value;

Ich kann stattdessen keine Werte für ein solches Optionsfeld abrufen

rate_value = document.getElementById('r1').value;

Um Werte eines HTML-Tags abzurufen, verwenden Sie document.getElementById ('r1'). innerHtml
James Cluade

0

Wenn Sie das verwenden JQuery, verwenden Sie bitte das folgende Snippet für eine Gruppe von Optionsfeldern.

var radioBtValue= $('input[type=radio][name=radiobt]:checked').val();

0

Verwenden Sie einfach: document.querySelector('input[rate][checked]').value


Hat bei mir nicht funktioniert; siehe oben eine ähnliche Syntax von Pawan, die dies tat. Wie in,document.querySelector('input[name = rate]:checked').value
Tim Erickson

0

   var rates=document.getElementsByName("rate");
            for (i = 0; i < rates.length; i++) {
            if (rates[i].checked) {
              console.log(rates[i].value);
              rate=rates[i].value;
              document.getElementById("rate").innerHTML = rate;
              alert(rate);
              
            }
          }
        <div id="rates">
          <input type="radio" id="r1" name="rate" value="Fixed Rate"> Fixed Rate
          <input type="radio" id="r2" name="rate" value="Variable Rate"> Variable Rate
          <input type="radio" id="r3" name="rate" value="Multi Rate" checked="checked"> Multi Rate  
        </div>
        </br>
        <div id='rate'>
        </div>


0

Sie können die Schaltflächen auch mit einer forEach-Schleife für die Elemente durchlaufen

    var elements = document.getElementsByName('radioButton');
    var checkedButton;
    console.log(elements);
    elements.forEach(e => {
        if (e.checked) {
            //if radio button is checked, set sort style
            checkedButton = e.value;
        }
    });

-1

https://codepen.io/anon/pen/YQxbZJ

Der HTML

<div id="rates">
<input type="radio" id="x1" name="rate" value="Fixed Rate"> Fixed Rate
<input type="radio" id="x2" name="rate" value="Variable Rate" 
checked="checked"> Variable Rate
<input type="radio" id="x3" name="rate" value="Multi Rate" > Multi Rate
</div>

<button id="rdio"> Check Radio </button>
<div id="check">

</div>

Die JS

var x ,y;
var x = document.getElementById("check");
function boom()
{
if (document.getElementById("x1").checked)
  y = document.getElementById("x1").value;

else if(document.getElementById("x2").checked)
  y = document.getElementById("x2").value;

else if (document.getElementById("x3").checked)
  y = document.getElementById("x3").value;
else
  y = "kuch nhi;"
x.innerHTML = y;
}

var z = document.getElementById('rdio');
z.addEventListener("click", boom);`

-2

In PHP ist es sehr einfach
HTML-Seite

Male<input type="radio" name="radio" value="male"><br/>
Female<input type="radio" name="radio" value="female"><br/>
Others<input type="radio" name="radio" value="other"><br/>
<input type="submit" value="submit">

Nehmen Sie Wert von Form zu PHP

$radio=$_POST['radio'];<br/>
use php if(isset($_POST['submit']))<br/>
{<br/>
echo "you selected".$radio."thank u";<br/>
}
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.