Come ottenere il valore del pulsante di opzione selezionato?


316

Voglio ottenere il valore selezionato da un gruppo di pulsanti di opzione.

Ecco il mio 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>

Ecco il mio .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;

Continuo a non essere definito.


50
Qui non stai usando jQuery, ma se mai lo volessi, potresti usare questo:$("input[type='radio'][name='rate']:checked").val();
GJK

Perché non riesci a ispezionare quell'oggetto? Comunque devi usare.checked
Amol M Kulkarni il

possibile duplicato dell'ottenimento del valore selezionato del pulsante di opzione in caso di azione
GOTO 0

Non sono sicuro se sia necessario o meno, ma è una buona abitudine mettere i pulsanti di opzione nel <form></form>contenitore.
Kamil,

Risposte:


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

L'elemento rate è a div, quindi non avrà un valore. Questo è probabilmente da dove undefinedproviene.

La checkedproprietà ti dirà se l'elemento è selezionato:

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

229
In jquery sarebbe$("input[name=rate]:checked").val()
Kamran Ahmed il

1
Non capisco, ci sono due elementi con lo stesso ID?
mzalazar,

3
@mzalazar No, ogni pulsante di opzione ha il proprio ID ma tutti hanno lo stesso nome che è ciò che li inserisce in un gruppo, quindi se selezioni uno l'altro viene deselezionato. Con Kamran Ahmed answer puoi verificare quale dei pulsanti di opzione nel gruppo è selezionato e ottenere solo il valore di quello selezionato (selezionato).
Broco,

4
Il codice di mahdavipanah appena sopra (con [checked]) cerca l' attributo (cioè lo stato iniziale). Dovresti invece usare :checked, che cerca la proprietà (cioè lo stato corrente) e che è quasi sempre quello che vuoi.
Gras Double

5
In Javascript sarebbedocument.querySelectorAll("input[name=rate]:checked")[0].value
Vincent McNabb il

521

Funziona su IE9 e versioni successive e su tutti gli altri browser.

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

13
Ovviamente dovresti verificare se querySelector restituisce null. Questo è il caso se nessun pulsante di opzione è selezionato.
Robert,

18
@KamranAhmed: la tua soluzione jQuery ha un costo molto più grande.

5
ParthikGosar: IE8 non supporta il :checkedselettore.

14
Si noti che le virgolette ratenon sono necessarie.
mbomb007,

1
@KamranAhmed fino a quando, a meno che non sia possibile profilare quanto sopra e / o ispezionare l'implementazione dietro la chiamata, non si può dire altro sulle prestazioni di quanto sopra di quanto si possa dire su qualsiasi altro oneliner che chiama il codice nativo. Non abbiamo abbastanza informazioni per speculare su come il browser riesce a localizzare gli :checkedelementi - forse ha tutto "cancellato e memorizzato nella cache" ed è O(1)un'operazione. A meno che tu non l'abbia profilato per indicare qualcosa come il tempo di query aumenta con il numero di elementi nella pagina, o se non capisci il codice sorgente del browser dietro di esso, non puoi dirlo.
AMN

144

È possibile ottenere il valore utilizzando la checkedproprietà

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
Dato che è possibile controllare solo una radio, normalmente mi aspetto breakche returnun'istruzione o all'interno del ifblocco interrompa ulteriori passaggi attraverso il loop. Un punto minore, ma di buon stile.
RobP,

1
Questa è l'implementazione vaniglia più pulita per questa domanda. Complimenti!
SeaWarrior404

37

Per voi persone che vivono ai margini:

Ora c'è qualcosa chiamato RadioNodeList e l'accesso alla sua proprietà value restituirà il valore dell'input attualmente controllato. Ciò eliminerà la necessità di filtrare prima l'input "controllato", come vediamo in molte delle risposte postate.

Modulo di esempio

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

Per recuperare il valore selezionato, è possibile fare qualcosa del genere:

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

Il JSFiddle per dimostrarlo: http://jsfiddle.net/vjop5xtq/

Si noti che è stato implementato in Firefox 33 (tutti gli altri principali browser sembrano supportarlo). I browser più vecchi richiedono un polfyill RadioNodeListaffinché questo funzioni correttamente


1
form.elements["test"].valuefunziona molto bene in Chrome [versione 49.0.2623.87 m].
Evan Hu,

Deve essere un modulo, non può usare ad esempio un div. In caso contrario, questo funziona in FF 71.0.
Andrew,

16

Quello che ha funzionato per me è riportato di seguito da api.jquery.com.

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

La variabile opzione selezionata conterrà il valore del pulsante di opzione selezionato (ovvero) o1 o o2


11

Un'altra opzione (apparentemente più vecchia) è usare il formato: "document.nameOfTheForm.nameOfTheInput.value;" ad esempio 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>

Puoi fare riferimento all'elemento con il suo nome all'interno di un modulo. Il tuo HTML originale non contiene un elemento del modulo però.

Fiddle qui (funziona in Chrome e Firefox): https://jsfiddle.net/Josh_Shields/23kg3tf4/1/


1
Questo è il formato DOM legacy molto più vecchio e in realtà non dovrebbe più essere utilizzato poiché è limitato a determinati elementi e non è al passo con gli standard attuali.
j08691,

@ j08691 Ah ok grazie per avermelo fatto notare. Questa è una delle cose che ho imparato in una classe universitaria. Probabilmente è meglio non fidarsi di nulla da lì e usare invece riferimenti online.
JHS,

6
"... non è al passo con gli standard attuali." non è un argomento convincente. Per favore, elabora. Se funziona, funziona. Sono anche meno righe rispetto alla risposta accettata che determina solo se l'opzione selezionata è "Tariffa fissa".
zeri-e-uno

Il violino sopra non sembra funzionare con il browser Safari (7.1.4). Il valore viene visualizzato come indefinito, la modifica degli stati dei pulsanti di opzione non influisce su questo.
Stuart R. Jefferys,

Sì, anche questo non funziona con il browser Edge (40.15063.0.0). Se si sono deprecati in questo modo, sembra strano, perché in questo modo è più semplice e ha senso poiché i pulsanti di opzione sono raggruppati per loro natura. La maggior parte delle altre risposte sembra proprio che stiano spuntando le caselle di controllo.
Mikato,

10

Usa document.querySelector ('input [tipo = radio]: controllato'). Valore; per ottenere il valore della casella di controllo selezionata, puoi utilizzare altri attributi per ottenere un valore come nome = genere, ecc. per favore passa sotto lo snippet sicuramente ti sarà utile,

Soluzione

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>

Grazie


7

CODICE HTML:

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

CODICE JQUERY:

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"/>

Otterrete

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

5

In Javascript possiamo ottenere i valori usando " getElementById()" nel codice sopra che hai pubblicato ha un nome non ID quindi puoi modificare in questo modo

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

usa questo rate_value secondo il tuo codice


5

È passato circa un anno da quando è stata posta la domanda, ma ho pensato che fosse possibile un sostanziale miglioramento delle risposte. Trovo questo lo script più semplice e versatile, perché controlla se un pulsante è stato verificato e, in tal caso, quale sia il suo valore:

<!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>

Puoi anche chiamare la funzione all'interno di un'altra funzione, come questa:

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

5

Supponendo che l'elemento del modulo sia indicato dalla myFormvariabile di seguito e che i pulsanti di opzione condividano il nome "my-radio-button-group-name", il seguente è puro JavaScript e conforme agli standard (anche se non ho verificato che sia disponibile ovunque ):

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

Quanto sopra produrrà il valore di un elemento del pulsante di opzione selezionato (o selezionato, come viene anche chiamato), se presente, o in nullaltro modo. Il punto cruciale della soluzione è la namedItemfunzione che funziona specificamente con i pulsanti di opzione.

Vedi HTMLFormElement.elements , HTMLFormControlsCollection.namedItem e soprattutto RadioNodeList.value , come di namedItem solito restituisce unRadioNodeList oggetto.

Uso MDN perché consente di monitorare la conformità agli standard, almeno in larga misura, e perché è più facile da comprendere rispetto a molte pubblicazioni WhatWG e W3C.


Quando ho scritto la risposta ho sfogliato le risposte esistenti e non ho visto nulla che somigliasse a ciò che volevo condividere. Ora vedo che ho perso almeno due soluzioni simili. Sebbene nessuno abbia scritto il proprio suggerimento sul codice usando la sintassi particolare che utilizzo, ma l'idea generale è la stessa. FYI. Il punto è ottenere il riferimento a RadioNodeListattraverso qualcosa come form.elements[name]o form[name](forse, una speculazione) o attraverso la mia sintassi sopra.
AMN

3

la chiamata diretta di un pulsante di opzione più volte fornisce il valore del PRIMO pulsante, non del pulsante CONTROLLATO. invece di scorrere i pulsanti di opzione per vedere quale è selezionato, preferisco chiamare una onclickfunzione javascript che imposta una variabile che può essere successivamente recuperata a piacimento.

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

che chiama:

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

ulteriore vantaggio è che posso trattare i dati e / o reagire al controllo di un pulsante (in questo caso, abilitando il pulsante INVIA).


5
dovresti invece associare l' onchangeevento, nel caso in cui l'utente usi una tastiera.
John Dvorak,

2

Un miglioramento rispetto alle precedenti funzioni suggerite:

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

La mia opinione su questo problema con javascript puro è quella di trovare il nodo verificato, trovare il suo valore e estrarlo dall'array.

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

Nota che sto usando le funzioni freccia . Vedi questo violino per un esempio funzionante.


Vorrei aggiungere un tagName === 'INPUT'segno di spunta per assicurarsi che non stai lavorando su tag diversi da input.
Aternus,


1

È possibile utilizzare .find()per selezionare l'elemento selezionato:

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

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

1
Non conoscevo Array.find, lo adoro! Ma questo si spezzerebbe se nessun elemento fosse controllato.
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>

poi...

var rate_value = rates.rate.value;

Puoi spiegare come questo risponde alla domanda?
soundlikeodd

msgstr " ottiene il valore selezionato da un gruppo di pulsanti dirates.rate.valuerates.value
opzione

Questa è una risposta corretta document.getElementById("rates").rate.value[oppure]document.forms[0].rate.value
Atika,

0

controllare il valore per ID:

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

0

Ho usato la funzione jQuery.click per ottenere l'output desiderato:

$('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;
});

Spero che sia d'aiuto.


0

Se i pulsanti sono in una forma
var myform = new FormData(getformbywhatever); myform.get("rate");
QuerySelector sopra è una soluzione migliore. Tuttavia, questo metodo è facile da capire, soprattutto se non hai idea di CSS. Inoltre, è molto probabile che i campi di input siano in una forma.
Non ho controllato, ci sono altre soluzioni simili, mi dispiace per la ripetizione


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

non è possibile ottenere valori di un pulsante di opzione come quello invece utilizzare

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

per ottenere i valori di un tag HTML usa document.getElementById ('r1'). innerHtml
James Cluade,

0

Se si utilizza il JQuery, utilizzare lo snippet qui sotto per il gruppo di pulsanti di opzione.

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

0

Usa semplicemente: document.querySelector('input[rate][checked]').value


Non ha funzionato per me; vedere una sintassi simile sopra da Pawan che ha fatto. Come in,document.querySelector('input[name = rate]:checked').value
Tim Erickson il

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

Puoi anche scorrere i pulsanti con un ciclo forEach sugli elementi

    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

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>

Il 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 è molto semplice la
pagina html

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">

Prendi valore dalla forma a php

$radio=$_POST['radio'];<br/>
use php if(isset($_POST['submit']))<br/>
{<br/>
echo "you selected".$radio."thank u";<br/>
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.