Como obter valor do botão de opção selecionado?

316

Quero obter o valor selecionado de um grupo de botões de opção.

Aqui está o meu 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>

Aqui está o meu .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;

Eu continuo indefinido.

ZombieBatman
fonte
50
Você não está usando jQuery aqui, mas se você sempre quis, você pode usar isto:$("input[type='radio'][name='rate']:checked").val();
GJK
Por que você não pode inspecionar esse objeto? De qualquer forma você precisa usar.checked
Amol M Kulkarni
Não tenho certeza se isso é necessário ou não, mas é um bom hábito colocar botões de opção em um <form></form>container.
Kamil
2
Possível duplicata Como obter o valor selecionado de rádio botão usando js
Damjan Pavlica

Respostas:

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

O elemento rates é a div, portanto, não terá um valor. Provavelmente é de onde undefinedvem isso.

A checkedpropriedade informará se o elemento está selecionado:

if (document.getElementById('r1').checked) {
  rate_value = document.getElementById('r1').value;
}
Joe F
fonte
229
Em jquery, seria #$("input[name=rate]:checked").val()
Kamran Ahmed 28/11
1
Eu não entendo, existem dois elementos com o mesmo ID?
Mzalazar
3
@mzalazar Não, todo botão de opção tem seu próprio ID, mas todos têm o mesmo nome, que é o que os coloca em um grupo. Portanto, se você selecionar um, o outro será desmarcado. Com a resposta Kamran Ahmed, você pode verificar qual dos botões de opção do grupo está selecionado e obter apenas o valor do botão selecionado (marcado).
Broco 4/04
4
O código de mahdavipanah logo acima (com [checked]) procura o atributo (ou seja, estado inicial). Você deve usar :checked, que procura a propriedade (ou seja, estado atual) e que quase sempre é o que você deseja.
Gras Double
5
Em Javascript seriadocument.querySelectorAll("input[name=rate]:checked")[0].value
Vincent McNabb
521

Isso funciona no IE9 e acima e em todos os outros navegadores.

document.querySelector('input[name="rate"]:checked').value;
Parthik Gosar
fonte
13
Claro que você teria que verificar se querySelector retorna nulo. Este é o caso se nenhum botão de opção estiver marcado.
Robert
18
@ KamranAhmed: Sua solução jQuery vem com um custo muito maior.
5
ParthikGosar: O IE8 não suporta o :checkedseletor.
14
Observe que as aspas ratenão são necessárias.
mbomb007
1
@KamranAhmed até e, a menos que você possa analisar o perfil acima e / ou inspecionar a implementação por trás da chamada, não pode dizer mais sobre o desempenho do que foi mencionado acima, nem sobre qualquer outro oneliner que chame código nativo. Não temos informações suficientes para especular como o navegador consegue localizar o :checked(s) elemento (s) - talvez ele tenha tudo "em hash e em cache" e é uma O(1)operação. A menos que você o tenha perfilado para indicar algo como o tempo de consulta aumenta com o número de elementos na página, ou a menos que você entenda o código-fonte do navegador, não poderá saber.
amn
144

Você pode obter o valor usando a checkedpropriedade

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;
    }
}
Joe
fonte
13
Dado que apenas um rádio pode ser verificado, eu normalmente esperaria que uma instrução breakou returndentro do ifbloco parasse passes adicionais no loop. Um ponto menor, mas bom estilo.
RobP
1
Esta é a implementação de baunilha mais limpa para esta pergunta. Parabéns!
precisa saber é o seguinte
37

Para vocês que vivem no limite:

Agora existe algo chamado RadioNodeList e o acesso à propriedade value retornará o valor da entrada atualmente marcada. Isso removerá a necessidade de primeiro filtrar a entrada 'marcada', como vemos em muitas das respostas postadas.

Exemplo de formulário

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

Para recuperar o valor verificado, você pode fazer algo assim:

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

O JSFiddle para provar isso: http://jsfiddle.net/vjop5xtq/

Observe que isso foi implementado no Firefox 33 (todos os outros principais navegadores parecem suportá-lo). Navegadores mais antigos precisarão de um polfyill para RadioNodeListque isso funcione corretamente

Daniel
fonte
1
form.elements["test"].valuefunciona muito bem no Chrome [versão 49.0.2623.87 m].
Evan Hu
Tem que ser uma forma, não pode usar, por exemplo, uma div. Caso contrário, isso está funcionando no FF 71.0.
Andrew
16

O que funcionou para mim é dado abaixo em 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()

A variável selectedOption conterá o valor do botão de opção selecionado (ou seja) o1 ou o2

Malathy
fonte
11

Outra opção (aparentemente mais antiga) é usar o formato: "document.nameOfTheForm.nameOfTheInput.value;" por exemplo, 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>

Você pode se referir ao elemento pelo nome em um formulário. No entanto, seu HTML original não contém um elemento de formulário.

Brinque aqui (funciona no Chrome e Firefox): https://jsfiddle.net/Josh_Shields/23kg3tf4/1/

JHS
fonte
1
Esse é o formato DOM herdado muito mais antigo e realmente não deve mais ser usado, pois se limita a certos elementos e não acompanha os padrões atuais.
J08691
@ j08691 Ah, obrigado por me avisar. Essa é uma das coisas que aprendi em uma aula da universidade. Provavelmente é melhor não confiar em nada a partir daí e apenas usar referências online.
JHS
6
"... não acompanha os padrões atuais." não é um argumento convincente. Por favor elabore. Se funcionar, funciona. Também é menos linhas do que a resposta aceita, que determina apenas se a opção selecionada é 'Taxa fixa'.
Zeros-and-ones
O violino acima parece não funcionar com o navegador Safari (7.1.4). O valor é exibido como indefinido, alterar os estados dos botões de opção não afeta isso.
Stuart R. Jefferys
Sim, isso também não funciona com o navegador Edge (40.15063.0.0). Se eles foram reprovados dessa maneira, parece estranho, porque é mais simples e faz sentido, pois os botões de opção são agrupados por natureza. A maioria das outras respostas parece que estão marcando as caixas de seleção.
Mikato 19/09/2017
10

Use document.querySelector ('input [tipo = radio]: marcado'). Value; para obter o valor da caixa de seleção selecionada, você pode usar outros atributos para obter um valor como nome = sexo etc. etc., siga o snippet abaixo.

Solução

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>

Obrigado

pawan vedak
fonte
7

CÓDIGO HTML:

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

CÓDIGO DO PEDIDO:

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

Você vai ter

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

fonte
5

Em Javascript, podemos obter os valores usando os IDs " getElementById()" no código acima que você postou e não contêm o nome, portanto você pode modificar assim

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

use esse rate_value de acordo com seu código

pradeep
fonte
5

Aproximadamente um ano se passou desde que a pergunta foi feita, mas achei que era possível uma melhora substancial das respostas. Acho esse o script mais fácil e versátil, porque verifica se um botão foi verificado e, em caso afirmativo, qual é o seu valor:

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

Você também pode chamar a função dentro de outra função, assim:

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

Supondo que seu elemento de formulário seja referido pela myFormvariável abaixo e que seus botões de opção compartilhem o nome "meu-botão-de-rádio-grupo-nome", o seguinte é puro JavaScript e compatível com os padrões (embora eu não tenha verificado se ele está disponível em qualquer lugar ):

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

O exemplo acima produzirá o valor de um elemento de botão de opção marcado (ou selecionado, como também é chamado), se houver, ou nullnão. O cerne da solução é a namedItemfunção que trabalha especificamente com os botões de opção.

Consulte HTMLFormElement.elements , HTMLFormControlsCollection.namedItem e especialmente RadioNodeList.value , como namedItem geralmente retorna um RadioNodeListobjeto.

Eu uso o MDN porque ele permite rastrear a conformidade com os padrões, pelo menos em grande parte, e porque é mais fácil de compreender do que muitas publicações WhatWG e W3C.

amn
fonte
Quando escrevi a resposta, vasculhei as respostas existentes e não vi nada parecido com o que eu queria compartilhar. Agora vejo que perdi pelo menos duas soluções semelhantes. Embora ninguém tenha escrito sua sugestão de código usando a sintaxe específica que emprego, mas a idéia geral é a mesma. PARA SUA INFORMAÇÃO. O objetivo é obter a referência a RadioNodeListatravés de algo como form.elements[name]ou form[name](talvez, uma especulação) ou através da minha sintaxe acima.
amn
3

A chamada direta de um botão de opção muitas vezes fornece o valor do botão PRIMEIRO, não o botão VERIFICADO. em vez de percorrer os botões de opção para ver qual deles está marcado, prefiro chamar uma onclickfunção javascript que define uma variável que pode ser recuperada posteriormente à vontade.

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

que chama:

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

Uma vantagem adicional é que eu posso tratar dados e / ou reagir à verificação de um botão (neste caso, ativar o botão SUBMIT).

Tony Gil
fonte
5
você deve vincular o onchangeevento, caso o usuário use um teclado.
precisa
2

Uma melhoria nas funções sugeridas anteriormente:

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;
}
Dave
fonte
2

Minha opinião sobre este problema com javascript puro é encontrar o nó verificado, encontrar seu valor e removê-lo da matriz.

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

Observe que estou usando funções de seta . Veja este violino para um exemplo de trabalho.

pongi
fonte
Eu adicionaria uma tagName === 'INPUT'verificação para garantir que você não esteja trabalhando em outras tags além de input.
Aternus
1

Se você estiver usando jQuery:

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

Senthil Kumar Thangavel
fonte
1

Você pode usar .find()para selecionar o elemento marcado:

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

var value = radio.length && radio.find(r => r.checked).value
Yukulélé
fonte
1
Eu não conhecia o Array.find, adorei! Mas isso seria interrompido se nenhum elemento fosse verificado.
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>

então...

var rate_value = rates.rate.value;
user7420100
fonte
Você pode explicar como isso responde à pergunta?
soundslikeodd
" obtém o valor selecionado de um grupo de botões de opção ": rates.rate.valuenotrates.value
user7420100 17/17/17
Esta é uma resposta correta. document.getElementById("rates").rate.value[ou]document.forms[0].rate.value
Atika
0

verifique o valor por ID:

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

Eu usei a função jQuery.click para obter a saída desejada:

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

Espero que ajude.

Animesh Singh
fonte
0

Se os botões estiverem no formato
var myform = new FormData(getformbywhatever); myform.get("rate");
QuerySelector acima, é uma solução melhor. No entanto, esse método é fácil de entender, especialmente se você não tem idéia sobre CSS. Além disso, é provável que os campos de entrada estejam em um formulário de qualquer maneira.
Não verifiquei, existem outras soluções semelhantes, desculpe pela repetição

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

não pode obter valores de um botão de opção como esse, em vez disso, use

rate_value = document.getElementById('r1').value;
James Cluade
fonte
para obter valores de uma utilização tag HTML document.getElementById ( 'r1') innerHTML.
James Cluade
0

Se você estiver usando o JQuery, use o snippet abaixo para o grupo de botões de opção.

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

Basta usar: document.querySelector('input[rate][checked]').value

mahdavipanah
fonte
Não funcionou para mim; veja uma sintaxe semelhante acima de Pawan que sim. Como em,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>

Bishnu Kumar Roy
fonte
0

Você também pode percorrer os botões com um loop forEach nos elementos

    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;
        }
    });
Adrian Andersen
fonte
-1

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

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

O 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);`
Anshu
fonte
-2

Em php é muito fácil a
página 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">

Pegue o valor do formulário para o php

$radio=$_POST['radio'];<br/>
use php if(isset($_POST['submit']))<br/>
{<br/>
echo "you selected".$radio."thank u";<br/>
}
Kavya Hanumantharaju
fonte