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.


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

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

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;

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

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


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


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/


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


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"

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


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

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.


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


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

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.


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


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

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;

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;

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.


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


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;

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

0

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


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>


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

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

-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/>
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.