Come posso sapere quale pulsante di opzione è selezionato tramite jQuery?


2707

Ho due pulsanti di opzione e desidero pubblicare il valore di quello selezionato. Come posso ottenere il valore con jQuery?

Posso ottenerli tutti così:

$("form :radio")

Come faccio a sapere quale è selezionato?

Risposte:


3936

Per ottenere il valore dell'elemento selezionato radioName di un modulo con ID myForm:

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

Ecco un esempio:

$('#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>


306
Ho finito per usare questo: $ ('form input [type = radio]: checked')
juan

46
@PeterJ: Perché hai usato due argomenti anziché semplicemente '#myform input[name=radioName]:checked'?
Sophie Alpert,

145
jQuery ha le prestazioni migliori se viene eseguito correttamente l'ambito e la selezione per ID è sempre il selettore con le prestazioni migliori. Il metodo a due argomenti è semplicemente un altro modo di farlo.
Peter J,

40
Per prestazioni ottimali, la documentazione consiglia di non utilizzare il: selettore radio. api.jquery.com/radio-selector
Peter J

2
Alternativo: $ ('. ClassName: checked');
Meetai.com,

410

Usa questo..

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

64
Se il tuo modulo ha più set di pulsanti di opzione, otterrò solo il valore del primo set, penso.
Brad,

3
Ciò restituirà solo il valore del primo pulsante di opzione che è selezionato nel modulo. Dovrebbe essere fatto come suggerito da Peter J.
MickJ

3
@MickJ Questo pezzo di codice è uguale a quello di Peter J ... Considerando il caso d'uso della domanda originale. Tuttavia, se hai vari gruppi di pulsanti di opzione, non funzionerà. Ecco perché è molto meglio usare [name = selector]
Lyth

1
Come accennato da @Brad, questo otterrà solo il valore del primo set. Quello che vuoi è sostituire ".val ()" con ".map (function () {return this.value;}). Get ();"
am_

1
Per quello che vale (sì, lo so ottimizzare prima del necessario blah blah) ma per pura performance funziona più velocemente soprattutto nei browser più vecchi:$("#myform").find("input[type='radio']:checked").val();
Mark Schultheiss

307

Se hai già un riferimento a un gruppo di pulsanti di opzione, ad esempio:

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

Utilizzare la filter()funzione, no find(). ( find()serve per localizzare elementi figlio / discendente, mentre filter()cerca elementi di livello superiore nella selezione.)

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

Note: questa risposta originariamente correggeva un'altra risposta che raccomandava di utilizzare find(), che sembra essere stata modificata da allora. find()potrebbe comunque essere utile per la situazione in cui si aveva già un riferimento a un elemento contenitore, ma non ai pulsanti di opzione, ad esempio:

var form = $("#mainForm");
...
var checkedValue = form.find("input[name=myRadio]:checked").val();

7
Volevo solo aggiungere, per motivi di chiarezza, che find () in realtà cerca tutti gli elementi discendenti (che corrispondono al selettore specificato). Se vuoi solo figli diretti, usa children ().
Matt Browne,

139

Questo dovrebbe funzionare:

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

Nota "" utilizzato attorno all'input: controllato e non '' come la soluzione di Peter J.


questa dovrebbe essere la risposta selezionata. Il nome è un modo molto carino per tenere traccia dei pulsanti di
opzione

79

È possibile utilizzare il: selettore selezionato insieme al selettore radio.

 $("form:radio:checked").val();

13
Sembra carino, tuttavia, la documentazione di jQuery consiglia di utilizzare [type = radio] anziché: radio per prestazioni migliori. È un compromesso tra leggibilità e prestazioni. Normalmente prendo la leggibilità rispetto alle prestazioni su questioni così banali, ma in questo caso penso che [type = radio] sia effettivamente più chiaro. Quindi in questo caso sembrerebbe $ ("form input [type = radio]: checked"). Val (). Comunque una risposta valida comunque.
Nessuno il

57

Se vuoi solo il valore booleano, ovvero se è selezionato o meno prova questo:

$("#Myradio").is(":checked")

53

Ottieni tutte le radio:

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

Filtro per ottenere quello verificato

radios.filter(":checked")



25

Ecco come vorrei scrivere il modulo e gestire l'ottenimento della radio controllata.

Utilizzando un modulo chiamato myForm:

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

Ottieni il valore dal modulo:

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

Se non stai pubblicando il modulo, lo semplificherei ulteriormente utilizzando:

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

Quindi ottenere il valore verificato diventa:

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

Avere un nome di classe sull'input mi permette di modellare facilmente gli input ...


24

Nel mio caso ho due pulsanti di opzione in una forma e volevo conoscere lo stato di ciascun pulsante. Questo sotto ha funzionato per me:

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


1
Cosa intendi per stato di ciascun pulsante? i pulsanti di opzione con lo stesso nome consentono di controllarne solo uno, pertanto, se si ottiene quello selezionato, il resto è deselezionato.
Dementic

17

In un pulsante di opzione generato da JSF (usando il <h:selectOneRadio>tag), puoi fare questo:

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

dove selectOneRadio ID è radiobutton_id e ID modulo è form_id .

Assicurati di usare name invece id , come indicato, perché jQuery utilizza questo attributo (il nome viene generato automaticamente da JSF simile all'ID di controllo).


15

Inoltre, controlla se l'utente non seleziona nulla.

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

15

Ho scritto un plugin jQuery per impostare e ottenere i valori dei pulsanti di opzione. Rispetta anche l'evento di "cambiamento" su di loro.

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

Inserisci il codice ovunque per abilitare il componente aggiuntivo. Allora divertiti! Sostituisce semplicemente la funzione val predefinita senza interrompere nulla.

Puoi visitare questo jsFiddle per provarlo in azione e vedere come funziona.

Violino


14

Se hai più pulsanti di opzione in forma singola, allora

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

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

Questo funziona per me.



12

Funziona benissimo

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

Demo di lavoro

Il :checkedselettore funziona per checkboxes, radio buttonse selezionare elementi. Solo per gli elementi selezionati, utilizzare il :selectedselettore.

API per :checked Selector


11

Per ottenere il valore della radio selezionata che utilizza una classe:

$('.class:checked').val()

10

Uso questo semplice script

$('input[name="myRadio"]').on('change', function() {
  var radioValue = $('input[name="myRadio"]:checked').val();        
  alert(radioValue); 
});

Usa l'evento click anziché l'evento change se vuoi che funzioni in tutti i browser
Matt Browne,

10

Usa questo:

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

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>


6

Se hai 1 solo set di pulsanti di opzione su 1 modulo, il codice jQuery è semplice come questo:

$( "input:checked" ).val()

5

Ho rilasciato una libreria per aiutare con questo. Estrae tutti i possibili valori di input, in realtà, ma include anche quale pulsante di opzione è stato verificato. Puoi verificarlo su https://github.com/mazondo/formalizedata

Ti darà un oggetto js delle risposte, quindi un modulo come:

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

ti darà:

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

4

Per recuperare tutti i valori dei pulsanti di opzione nell'array JavaScript, utilizzare il seguente codice jQuery:

var values = jQuery('input:checkbox:checked.group1').map(function () {
    return this.value;
}).get();

2
I pulsanti di opzione non corrispondono alle caselle di controllo. In questo esempio vengono utilizzate le caselle di controllo.
Matt Browne,

4

Provalo-

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

console.log(radioVal);

4

JQuery per ottenere tutti i pulsanti di opzione nel modulo e il valore selezionato.

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

3

Un altro modo per ottenerlo:

 $("#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>


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

1

Da questa domanda , ho trovato un modo alternativo per accedere a quello attualmente selezionato inputquando sei all'interno di un clickevento per la rispettiva etichetta. Il motivo è perché il nuovo selezionato inputnon viene aggiornato fino a dopo l' labelevento relativo al clic.

TL; DR

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

  ...
});


1

Quello che dovevo fare era semplificare il codice C #, ovvero fare il più possibile nel front-end JavaScript. Sto usando un contenitore fieldset perché sto lavorando in DNN e ha una sua forma. Quindi non posso aggiungere un modulo.

Devo verificare quale casella di testo su 3 viene utilizzata e, in caso affermativo, qual è il tipo di ricerca? Inizia con il valore, contiene il valore, corrispondenza esatta del valore.

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 il mio JavaScript è:

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

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

    }

Basta dire qualsiasi tag contenente un ID può essere utilizzato. Per DNNers, questo è buono a sapersi. L'obiettivo finale qui è passare al codice di medio livello ciò che è necessario per avviare una ricerca di parti in SQL Server.

In questo modo non devo copiare anche il codice C # precedente molto più complicato. Il sollevamento pesante viene eseguito proprio qui.

Ho dovuto cercare un po 'questo e poi armeggiarlo per farlo funzionare. Quindi, per altri DNNer, si spera che sia facile da trovare.

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.