Come ottenere il valore del pulsante di opzione selezionato?


265

Sto riscontrando qualche strano problema con il mio programma JS. Ho funzionato correttamente, ma per qualche motivo non funziona più. Voglio solo trovare il valore del pulsante di opzione (quale è selezionato) e restituirlo a una variabile. Per qualche motivo continua a tornare undefined.

Ecco il mio codice:

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>

Risposte:


395

Puoi fare qualcosa del genere:

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

Modifica: grazie a HATCHA e jpsetung per i tuoi suggerimenti di modifica.


5
Funzionava con jquery 1.7 ma ora la sintassi corretta per jQuery 1.9 è $ ('input [name = "genderS"]: checked'). Val (); (rimuovi la @)
jptsetung il

1
Credo che la @sintassi sia stata deprecata anche prima (jquery 1.2)
Tom Pietrosanti,

@TomPietrosanti la documentazione sembra essere un po 'fuori, jsfiddle.net/Xxxd3/608 funziona in <1.7.2 ma non in> 1.8.3. Indipendentemente da ciò, il @dovrebbe essere sicuramente rimosso
jbabey,

Sì, sembra che abbiano lasciato un po 'di compatibilità all'indietro lì, ma non hanno aggiornato i documenti per abbinarli. Ricordo che hoopla quando hanno abbandonato alcune funzionalità deprecate che erano ancora ampiamente utilizzate, quindi hanno aggiunto il supporto. Forse è per questo che ...
Tom Pietrosanti,

2
document.querySelector()probabilmente dovrebbe essere l'approccio raccomandato in JavaScript diretto ora.
Dave,

338

Funziona con qualsiasi esploratore.

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

Questo è un modo semplice per ottenere il valore di qualsiasi tipo di input. Inoltre, non è necessario includere il percorso jQuery.


23
L'uso di document.querySelector () è una pura risposta javascript: developer.mozilla.org/en-US/docs/Web/API/document.querySelector
AdamJonR

8
Se lo memorizzi in una variabel e nessun pulsante di opzione è selezionato, il browser si arresta. La console dice: TypeError document.querySelector(...)è null.
chiamami

14
Funziona solo se ne viene selezionato uno. Quindi dovresti verificarlo prima. var selector = document.querySelector('input[name="genderS"]:checked'); if(selector) console.log(selector.value);
Markus Zeller,

Sto lavorando con Templates in Meteor, e quel :checkedtrucco mi ha completamente risolto. Per me la correzione della lettura dei pulsanti di accountType = template.find("[name='optradio']:checked").value;
opzione

Ho un ambiente aziendale in cui non funziona in modo coerente su IE11, una sorta di modalità di compatibilità all'indietro.
Steve Black,

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

5
Anche questo funziona:document.forms.your-form-name.name-shared-by-radio-buttons.value
Web_Designer il

7
Penso che molte persone lo stiano trascurando. La risposta accettata funziona. La risposta di Giorgos Tsakonas è migliore. Ma questa è la risposta fondamentalmente corretta. Questo è come funzionano effettivamente i pulsanti di opzione. Si noti che se non è stato selezionato nulla, restituisce una stringa vuota.
Mark Goldfain,

@Web_Designer Il tuo commento non dovrebbe essere una vera risposta?
Ideogram,

Questo non funziona se l'ingresso radio non è in una forma, quindi non penso che questa sia una risposta migliore rispetto a querySelector uno, forse questi due dovrebbero essere uniti.
Tomáš Hübelbauer,

in questo modo non funziona se le tue radio sono all'interno delle etichette
Igor Fomenko,

19

Da jQuery 1.8, la sintassi corretta per la query è

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

Non $('input[@name="genderS"]:checked').val();più, che funzionava in jQuery 1.7 (con la @ ).


16

Versione ECMAScript 6

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

16

La soluzione più semplice:

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

1
Votato per due motivi: 1. funziona. 2. non era una risposta jquery scadente.
Giovanni,

21
Questa è una copia esatta della risposta di @Giorgos Tsakonas sopra che è stata data un anno prima.
T Nguyen,

7

Prova questo

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

Un violino qui .


6

Modifica: come detto da Chips_100 dovresti usare:

var sizes = document.theForm[field];

direttamente senza utilizzare la variabile di test.


Vecchia risposta:

Non ti dovrebbe evalpiacere questo?

var sizes = eval(test);

Non so come funzioni, ma per me stai solo copiando una stringa.


eval non è l'opzione migliore qui ... potresti voler dire var sizes = document.theForm[field];ed eliminare il primo compito, quindi non usare testpiù la variabile.
Dennis

Per quanto ne so, eval funzionerebbe così com'è? O funzionerebbe solo con eval('var sizes=document.theForm.' + field)?
Michael Laffargue,

l'istruzione eval nella tua risposta var sizes = eval(test);funzionerebbe in questo modo (l'ho appena testata in firebug).
Dennis

Questo ha più senso, ma visualizzo un errore "Token imprevisto [" su quella riga in cui ho inserito le fieldparentesi. Qualche ipotesi sul perché?
mkyong,

4

Questo è puro JavaScript, basato sulla risposta di @Fontas ma con codice di sicurezza per restituire una stringa vuota (ed evitare un TypeError) se non è presente un pulsante di opzione selezionato:

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

Il codice si suddivide in questo modo:

  • Riga 1: ottenere un riferimento al controllo che (a) è un <input>tipo, (b) ha un nameattributo digenderS e (c) è controllato.
  • Riga 2: se esiste un tale controllo, restituisce il suo valore. In caso contrario, restituisce una stringa vuota. La genderSRadiovariabile è true se la riga 1 trova il controllo e null / falsey in caso contrario.

Per JQuery, usa la risposta di @ jbabey e nota che se non c'è un pulsante di opzione selezionato, tornerà undefined.



3

Ecco un esempio per le radio in cui non viene utilizzato l'attributo Checked = "checked"

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/ [ Fai clic su Trova senza selezionare alcuna radio ]

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


2

Ecco un bel modo per ottenere il valore del pulsante di opzione selezionato con JavaScript semplice:

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

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

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

È inoltre possibile utilizzare Array Trova la checkedproprietà per trovare l'elemento selezionato:

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

1

Utilizzando un javascript puro, è possibile gestire il riferimento all'oggetto che ha inviato l'evento.

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

1

supponiamo che sia necessario inserire diverse righe di pulsanti di opzione in un modulo, ciascuno con nomi di attributo separati ('opzione1', 'opzione2' ecc.) ma lo stesso nome di classe. Forse hai bisogno di loro in più righe in cui ciascuna invierà un valore basato su una scala da 1 a 5 relativa a una domanda. puoi scrivere il tuo javascript in questo modo:

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

Vorrei anche inserire l'output finale in un elemento del modulo nascosto da inviare insieme al modulo.


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

0

Se è possibile assegnare un ID per l'elemento del modulo (), in questo modo può essere considerato un modo alternativo sicuro (specialmente quando il nome dell'elemento del gruppo radio non è univoco nel documento):

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

ecc. quindi usa solo

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

O

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

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.