Como posso saber qual botão de opção está selecionado via jQuery?

2707

Eu tenho dois botões de opção e quero postar o valor do selecionado. Como posso obter o valor com o jQuery?

Eu posso obter todos eles assim:

$("form :radio")

Como sei qual é selecionado?

juan
fonte

Respostas:

3936

Para obter o valor do item selecionado radioName de um formulário com o ID myForm:

$('input[name=radioName]:checked', '#myForm').val()

Aqui está um exemplo:

$('#myForm input').on('change', function() {
   alert($('input[name=radioName]:checked', '#myForm').val()); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myForm">
  <input type="radio" name="radioName" value="1" /> 1 <br />
  <input type="radio" name="radioName" value="2" /> 2 <br />
  <input type="radio" name="radioName" value="3" /> 3 <br />
</form>

Peter J
fonte
306
Acabei usando o seguinte: $ ('form input [type = radio]: selected') #
307 juan
46
@ PeterJ: Por que você usou dois argumentos em vez de simplesmente '#myform input[name=radioName]:checked'?
Sophie Alpert
145
O jQuery tem melhor desempenho quando definido corretamente no escopo e a seleção por ID é sempre o seletor de melhor desempenho. O método de dois argumentos é simplesmente outra maneira de fazê-lo.
12139 Peter J
40
Para obter o melhor desempenho, a documentação recomenda não usar o seletor de rádio :. api.jquery.com/radio-selector
Peter J
2
Alternativo: $ ('. ClassName: selected');
Meetai.com
410

Usa isto..

$("#myform input[type='radio']:checked").val();
Joberror
fonte
64
Se o seu formulário tiver vários conjuntos de botões de opção, isso só terá o valor do primeiro conjunto, eu acho.
21312 Brad
3
Isso retornará apenas o valor do primeiro botão de opção marcado no formulário. Isso deve ser feito da maneira que Peter J. sugeriu.
MickJ
3
@MickJ Esse trecho de código é o mesmo de Peter J ... Considerando o caso de uso da pergunta original. No entanto, se você tiver vários grupos de botões de opção, ele não funcionará. Isso é porque é pro melhor uso [name = selector]
Lyth
1
Como o @Brad mencionou, isso só obterá o valor do primeiro conjunto. O que você deseja é substituir ".val ()" por ".map (function () {return this.value;}). Get ();"
AM_
1
Por que vale a pena, (sim eu sei otimizar antes precisava blá blá), mas para o desempenho puro funciona este mais rápido, especialmente em navegadores mais antigos:$("#myform").find("input[type='radio']:checked").val();
Mark Schultheiss
307

Se você já tem uma referência a um grupo de botões de opção, por exemplo:

var myRadio = $("input[name=myRadio]");

Use a filter()função, não find(). ( find()é para localizar elementos filho / descendente, enquanto filter()pesquisa elementos de nível superior em sua seleção.)

var checkedValue = myRadio.filter(":checked").val();

Notas: Esta resposta estava originalmente corrigindo outra resposta recomendada find(), que parece ter sido alterada. find()ainda pode ser útil para a situação em que você já tinha uma referência a um elemento de contêiner, mas não aos botões de opção, por exemplo:

var form = $("#mainForm");
...
var checkedValue = form.find("input[name=myRadio]:checked").val();
Matt Browne
fonte
7
Eu só queria acrescentar, por uma questão de clareza, que find () realmente pesquisa todos os elementos descendentes (que correspondem ao seletor fornecido). Se você deseja apenas filhos diretos, use children ().
Matt Brown
139

Isso deve funcionar:

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

Observe o "" usado em torno da entrada: marcado e não '' como a solução de Peter J

Cam Tullos
fonte
essa deve ser a resposta selecionada. nome é uma maneira muito agradável para manter o controle de botões de rádio
quemeful
79

Você pode usar o seletor: marcado junto com o seletor de rádio.

 $("form:radio:checked").val();
tvanfosson
fonte
13
Parece bom, no entanto, a documentação do jQuery recomenda usar [type = radio] em vez de: radio para obter melhor desempenho. É uma troca entre legibilidade e desempenho. Normalmente, tomo legibilidade sobre o desempenho em assuntos triviais, mas, neste caso, acho que [type = radio] é realmente mais claro. Portanto, nesse caso, seria semelhante a $ ("formulário input [type = radio]: marcado"). Val (). Ainda é uma resposta válida.
Nenhum
57

Se você deseja apenas o valor booleano, ou seja, se estiver marcado ou não, tente o seguinte:

$("#Myradio").is(":checked")
Juan
fonte
53

Obtenha todos os rádios:

var radios = jQuery("input[type='radio']");

Filtre para verificar o que é verificado

radios.filter(":checked")
Alex V
fonte
48

Outra opção é:

$('input[name=radioName]:checked').val()
Dragão Vermelho
fonte
6
A parte ": radio" não é necessária aqui.
Matt Browne
31
$("input:radio:checked").val();
Phillip Senn
fonte
25

Aqui está como eu escreveria o formulário e lidaria com a obtenção do rádio verificado.

Usando um formulário chamado myForm:

<form id='myForm'>
    <input type='radio' name='radio1' class='radio1' value='val1' />
    <input type='radio' name='radio1' class='radio1' value='val2' />
    ...
</form>

Obtenha o valor do formulário:

$('#myForm .radio1:checked').val();

Se você não está postando o formulário, eu o simplificaria ainda mais usando:

<input type='radio' class='radio1' value='val1' />
<input type='radio' class='radio1' value='val2' />

A obtenção do valor verificado se torna:

    $('.radio1:checked').val();

Ter um nome de classe na entrada me permite estilizar facilmente as entradas ...

Darin Peterson
fonte
24

No meu caso, tenho dois botões de opção em um formulário e queria saber o status de cada botão. Isso abaixo funcionou para mim:

// get radio buttons value
console.log( "radio1: " +  $('input[id=radio1]:checked', '#toggle-form').val() );
console.log( "radio2: " +  $('input[id=radio2]:checked', '#toggle-form').val() );


    
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="toggle-form">
  <div id="radio">
    <input type="radio" id="radio1" name="radio" checked="checked" /><label for="radio1">Plot single</label>
    <input type="radio" id="radio2" name="radio"/><label for="radio2">Plot all</label>
  </div>
</form>

rmbianchi
fonte
1
Como assim, o status de cada botão? os botões de opção com o mesmo nome permitem que apenas um seja verificado; portanto, se você o marcar, o restante será desmarcado.
Dementic
17

Em um botão de opção gerado por JSF (usando a <h:selectOneRadio>tag), você pode fazer isso:

radiobuttonvalue = jQuery("input[name='form_id\:radiobutton_id']:checked").val();

onde selectOneRadio ID é radiobutton_id e ID do formulário é form_id .

Certifique-se de usar o nome em vez do ID , como indicado, porque jQuery usa esse atributo ( nome é gerado automaticamente pelo JSF semelhante a ID de controle).

Francisco Alvarado
fonte
15

Além disso, verifique se o usuário não seleciona nada.

var radioanswer = 'none';
if ($('input[name=myRadio]:checked').val() != null) {           
   radioanswer = $('input[name=myRadio]:checked').val();
}
Marca
fonte
15

Eu escrevi um plugin jQuery para definir e obter valores de botões de opção. Ele também respeita o evento "change" neles.

(function ($) {

    function changeRadioButton(element, value) {
        var name = $(element).attr("name");
        $("[type=radio][name=" + name + "]:checked").removeAttr("checked");
        $("[type=radio][name=" + name + "][value=" + value + "]").attr("checked", "checked");
        $("[type=radio][name=" + name + "]:checked").change();
    }

    function getRadioButton(element) {
        var name = $(element).attr("name");
        return $("[type=radio][name=" + name + "]:checked").attr("value");
    }

    var originalVal = $.fn.val;
    $.fn.val = function(value) {

        //is it a radio button? treat it differently.
        if($(this).is("[type=radio]")) {

            if (typeof value != 'undefined') {

                //setter
                changeRadioButton(this, value);
                return $(this);

            } else {

                //getter
                return getRadioButton(this);

            }

        } else {

            //it wasn't a radio button - let's call the default val function.
            if (typeof value != 'undefined') {
                return originalVal.call(this, value);
            } else {
                return originalVal.call(this);
            }

        }
    };
})(jQuery);

Coloque o código em qualquer lugar para ativar o suplemento. Então aproveite! Ele simplesmente substitui a função val padrão sem quebrar nada.

Você pode visitar este jsFiddle para experimentá-lo em ação e ver como ele funciona.

Violino

Mathias Lykkegaard Lorenzen
fonte
14

Se você tiver vários botões de opção em formato único,

var myRadio1 = $('input[name=radioButtonName1]');
var value1 = myRadio1.filter(':checked').val();

var myRadio2 = $('input[name=radioButtonName2]');
var value2 = myRadio2.filter(':checked').val();

Isso está funcionando para mim.

Ramesh
fonte
12
 $(".Stat").click(function () {
     var rdbVal1 = $("input[name$=S]:checked").val();
 }
Swadesh Bhattacharya
fonte
12

Isso funciona bem

$('input[type="radio"][class="className"]:checked').val()

Demonstração de trabalho

O :checkedselector trabalha para checkboxes, radio buttonse selecione elementos. Apenas para selecionar elementos, use o :selectedseletor.

API para :checked Selector

Manoj
fonte
11

Para obter o valor do rádio selecionado que usa uma classe:

$('.class:checked').val()
Rodrigo Dias
fonte
10

Eu uso esse script simples

$('input[name="myRadio"]').on('change', function() {
  var radioValue = $('input[name="myRadio"]:checked').val();        
  alert(radioValue); 
});
Lafif Astahdziq
fonte
Use o evento de clique, em vez do evento de alteração, se você quer que ele funcione em todos os navegadores
Matt Browne
10

Usa isto:

value = $('input[name=button-name]:checked').val();
jeswin
fonte
8

DEMO : https://jsfiddle.net/ipsjolly/xygr065w/

	$(function(){
	    $("#submit").click(function(){      
	        alert($('input:radio:checked').val());
	    });
	 });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
       <tr>
         <td>Sales Promotion</td>
         <td><input type="radio" name="q12_3" value="1">1</td>
         <td><input type="radio" name="q12_3" value="2">2</td>
         <td><input type="radio" name="q12_3" value="3">3</td>
         <td><input type="radio" name="q12_3" value="4">4</td>
         <td><input type="radio" name="q12_3" value="5">5</td>
      </tr>
    </table>
<button id="submit">submit</button>

Code Spy
fonte
6

Se você tiver apenas 1 conjunto de botões de opção em 1 formulário, o código do jQuery é tão simples quanto isto:

$( "input:checked" ).val()
Randy Greencorn
fonte
5

Lancei uma biblioteca para ajudar com isso. Puxa todos os valores de entrada possíveis, na verdade, mas também inclui qual botão de opção foi verificado. Você pode conferir em https://github.com/mazondo/formalizedata

Ele fornecerá um objeto js das respostas, para um formulário como:

<form>
<input type="radio" name"favorite-color" value="blue" checked> Blue
<input type="radio" name="favorite-color" value="red"> Red
</form>

Darei à você:

$("form").formalizeData()
{
  "favorite-color" : "blue"
}
Ryan
fonte
4

Para recuperar todos os valores dos botões de opção na matriz JavaScript, use o seguinte código jQuery:

var values = jQuery('input:checkbox:checked.group1').map(function () {
    return this.value;
}).get();
Nilesh
fonte
2
Os botões de opção não são os mesmos que as caixas de seleção. Este exemplo usa caixas de seleção.
Matt Browne
4

tente-

var radioVal = $("#myform").find("input[type='radio']:checked").val();

console.log(radioVal);
Gautam Rai
fonte
4

JQuery para obter todos os botões de opção no formulário e o valor verificado.

$.each($("input[type='radio']").filter(":checked"), function () {
  console.log("Name:" + this.name);
  console.log("Value:" + $(this).val());
});
Iyyappan Amirthalingam
fonte
3

Outra maneira de obtê-lo:

 $("#myForm input[type=radio]").on("change",function(){
   if(this.checked) {
    alert(this.value);
    }
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myForm">
   <span><input type="radio" name="q12_3" value="1">1</span><br>
   <span><input type="radio" name="q12_3" value="2">2</span>
</form>

Mehdi Bouzidi
fonte
2
$(function () {
// Someone has clicked one of the radio buttons
var myform= 'form.myform';
$(myform).click(function () {
    var radValue= "";
    $(this).find('input[type=radio]:checked').each(function () {
        radValue= $(this).val();
    });
  })
});
JoshYates1980
fonte
1

A partir dessa pergunta , criei uma maneira alternativa de acessar os selecionados atualmente inputquando você estiver em um clickevento para o respectivo rótulo. O motivo é que o recém-selecionado inputnão é atualizado até depois do labelevento de clique.

TL; DR

$('label').click(function() {
  var selected = $('#' + $(this).attr('for')).val();

  ...
});

Patrick Roberts
fonte
1

O que eu precisava fazer era simplificar o código C #, ou seja, fazer o máximo possível no JavaScript de front-end. Estou usando um contêiner fieldset porque estou trabalhando em DNN e ele tem seu próprio formulário. Portanto, não posso adicionar um formulário.

Preciso testar qual caixa de texto de 3 está sendo usada e, se for, qual é o tipo de pesquisa? Inicia com o valor, contém o valor, Correspondência exata do valor.

HTML:

<fieldset id="fsPartNum" class="form-inline">
<div class="form-group">
    <label for="txtPartNumber">Part Number:</label>
    <input type="text" id="txtPartNumber" class="input-margin-pn" />
</div>
<div class="form-group">
    <label for="radPNStartsWith">Starts With: </label>
    <input type="radio" id="radPNStartsWith" name="partNumber" checked  value="StartsWith"/>
</div>
<div class="form-group">
    <label for="radPNContains">Contains: </label>
    <input type="radio" id="radPNContains" name="partNumber" value="Contains" />
</div>
<div class="form-group">
    <label for="radPNExactMatch">Exact Match: </label>
    <input type="radio" id="radPNExactMatch" name="partNumber" value="ExactMatch" />
</div>

E meu JavaScript é:

        alert($('input[name=partNumber]:checked', '#fsPartNum').val()); 
    if(txtPartNumber.val() !== ''){
        message = 'Customer Part Number';
    }
    else if(txtCommercialPartNumber.val() !== ''){

    }
    else if(txtDescription.val() !== ''){

    }

Apenas dizendo que qualquer tag que contenha um ID pode ser usada. Para DNNers, é bom saber. O objetivo final aqui é passar para o código de nível médio o necessário para iniciar uma pesquisa de peças no SQL Server.

Dessa forma, não preciso copiar também o código C # anterior, muito mais complicado. O trabalho pesado está sendo feito aqui.

Eu tive que procurar um pouco por isso e depois mexer com ele para fazê-lo funcionar. Portanto, para outros DNNers, espero que seja fácil de encontrar.

user1585204
fonte