In jQuery, come posso selezionare un elemento in base al suo attributo name?


328

Ho 3 pulsanti di opzione nella mia pagina Web, come di seguito:

<label for="theme-grey">
  <input type="radio" id="theme-grey" name="theme" value="grey" />Grey</label>
<label for="theme-pink">
  <input type="radio" id="theme-pink" name="theme" value="pink" />Pink</label>
<label for="theme-green">
  <input type="radio" id="theme-green" name="theme" value="green" />Green</label>

In jQuery, voglio ottenere il valore del pulsante di opzione selezionato quando si fa clic su uno di questi tre. In jQuery abbiamo selettori id (#) e class (.), Ma cosa succede se voglio trovare un pulsante di opzione con il suo nome, come di seguito?

$("<radiobutton name attribute>").click(function(){});

Per favore, dimmi come risolvere questo problema.


5
non è necessario specificare l'attributo 'for', purché i campi siano inclusi tra i tag 'label' corrispondenti
Lucius,

2
jQuery 1.8 e versioni successive lo cambiano .... Ho aggiunto una risposta spiegando di seguito.
Kevin LaBranche,

3
La risposta di A1rPun è la migliore: un one-liner non jQuery!
Rudey,

1
Ho usato un pulsante di opzione per mantenere lo stato nella mia app js. Debug di un'ora buona prima di controllare questo thread.
Dai

In pianura JS:document.querySelectorAll("input:radio[name=theme]").forEach(function() { this.onclick=function() { var value = this.value; }; });
mplungjan,

Risposte:


339

Questo dovrebbe farlo, tutto questo è nella documentazione , che ha un esempio molto simile a questo:

$("input[type='radio'][name='theme']").click(function() {
    var value = $(this).val();
});

Dovrei anche notare che hai più ID identici in quello snippet. Questo è HTML non valido. Utilizzare le classi per raggruppare un insieme di elementi, non ID, poiché dovrebbero essere univoci.


4
@gargantaun: se fai clic su un pulsante di opzione, cosa succede?
Paolo Bergantino

11
Buon punto. Anche se non è ancora "Come ottenere il valore del pulsante di opzione selezionato usando il suo nome in jQuery?". È "Come ottenere il valore del pulsante di opzione selezionato quando si fa clic su di esso utilizzando jQuery?". Una piccola differenza, ma una che mi ha sconcertato per un po '.
gigantesco

1
Secondo la domanda questa risposta è corretta. nella visione globale cerchiamo la risposta di Clayton.
Krish,

8
Come di jQuery 1.8 utilizzo [type='radio']al posto di :radioquel modo jQuery può sfruttare il miglioramento delle prestazioni fornite dal DOM nativo querySelectorAll()metodo.
Adam,

2
La risposta di @PaoloBergantino è corretta al 100% perché restituisce il valore dopo aver fatto clic sul pulsante di opzione desiderato. La risposta di @ Clayton Rabenda non dà questo.
Azam Alvi,

185

Per determinare quale pulsante di opzione è selezionato, provare questo:

$('input:radio[name=theme]').click(function() {
  var val = $('input:radio[name=theme]:checked').val();
});

L'evento verrà catturato per tutti i pulsanti di opzione nel gruppo e il valore del pulsante selezionato verrà posizionato in val.

Aggiornamento: dopo la pubblicazione ho deciso che la risposta di Paolo sopra è migliore, poiché utilizza un attraversamento DOM in meno. Lascio che questa risposta sia valida poiché mostra come ottenere l'elemento selezionato in modo compatibile con più browser.


3
Base don come ho letto la domanda, questa era la risposta di cui avevo bisogno. : controllato è quello che mi mancava nella mia equazione. Grazie.
HPWD,

9
Come di jQuery 1.8 utilizzo [type='radio']al posto di :radioquel modo jQuery può sfruttare il miglioramento delle prestazioni fornite dal DOM nativo querySelectorAll()metodo.
Adam,

Ho dato uno spazio dopo i due punti e prima "controllato" per errore. Quindi assicurati che non ci sia spazio.
Scimmia

Una risposta utile per coloro che non desiderano ottenere il valore da un gestore eventi click. Altrimenti, è necessario utilizzare :checkedper trovare quale pulsante è selezionato, ad esempio, con un gestore eventi di invio modulo in cui la thisparola chiave non è mappata al pulsante selezionato.
che-azeh,

155
$('input:radio[name=theme]:checked').val();

Ho continuato semplicemente $("input[name=theme]:checked").val();(tralasciando la :radioparte e sembra funzionare bene in IE, FF, Safari e Chrome. Ho dovuto lavorare con jQ v 1.3 ... Ovviamente, ciò significa che c'è solo un elemento chiamato 'tema'
morespace54,

2
Questa è la migliore risposta IMO, dice "procurami il valore della radio CHECKED con QUESTO nome". Non c'è bisogno di eventi, ecc.
ProVega

39

un altro modo

$('input:radio[name=theme]').filter(":checked").val()

1
Questo è utile se sei interessato ad afferrare il valore +1
swapnesh,

Questo è solido perché è possibile utilizzare una variabile per mantenere i pulsanti di opzione, ad esempio $themeRadios = $('input:radio[name=theme'])per impostare eventuali gestori di eventi e quindi ottenere il valore utilizzando il filtro, ad es $themeRadios.filter(":checked").val().
Joshua Pinter,

Adoro questa soluzione.
Abele,

20

Questo funziona alla grande per me. Ad esempio hai due pulsanti di opzione con lo stesso "nome" e volevi solo ottenere il valore di quello selezionato. Puoi provare questo.

$valueOfTheCheckedRadio = $('[name=radioName]:checked').val();

Il motivo per cui questa risposta è migliore della risposta 230+ attualmente accettata è perché questa risposta spiega anche quando l'utente interagisce con un pulsante di opzione tramite tastiera.
gmeben,

16

Il seguente codice viene utilizzato per ottenere il valore del pulsante di opzione selezionato per nome

jQuery("input:radio[name=theme]:checked").val();

Grazie Adnan


hmm .. non ho corretto la formattazione del codice nella tua ultima risposta? Per favore, prenditi cura di te stesso :-)
Kleopatra il

13

Ho trovato questa domanda mentre cercavo un errore dopo aver eseguito l'aggiornamento da 1.7.2 di jQuery a 1.8.2. Sto aggiungendo la mia risposta perché c'è stato un cambiamento in jQuery 1.8 e versioni successive che cambia il modo in cui a questa domanda viene data risposta ora.

Con jQuery 1.8 hanno deprecato gli pseudo-selettori come: radio,: checkbox,: text.

Per fare quanto sopra ora basta sostituire il :radiocon [type=radio].

Quindi la tua risposta ora diventa per tutte le versioni di jQuery 1.8 e successive:

$("input[type=radio][name=theme]").click(function() { 
    var value = $(this).val(); 
}); 

Puoi leggere la modifica sul readme 1.8 e il ticket specifico per questa modifica , nonché capire perché nella pagina: radio selector nella sezione Informazioni aggiuntive.


5
: selezionato non è obsoleto. Quindi puoi usare$("input[type='radio'][name='theme']:checked")
Adam,

12

Per chiunque non voglia includere una libreria per fare qualcosa di veramente semplice:

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

jsfiddle

Per una panoramica delle prestazioni delle risposte correnti, consultare qui


1
Grazie per questa risposta Perché non sono riuscito a ottenere la risposta accettata per funzionare in qualsiasi forma.
Chris Holmes,

9

Se desideri conoscere il valore del pulsante di opzione selezionato predefinito prima di un evento clic, prova questo:

alert ($ ( "Ingresso: Radio: checked"). val ());

6

È possibile utilizzare la funzione filtro se nella pagina sono presenti più gruppi radio, come indicato di seguito

$('input[type=radio]').change(function(){
    var value = $(this).filter(':checked' ).val();
    alert(value);
});

Ecco l'url di violino

http://jsfiddle.net/h6ye7/67/


4
<input type="radio" name="ans3" value="help"> 
<input type="radio" name="ans3" value="help1">
<input type="radio" name="ans3" value="help2">

<input type="radio" name="ans2" value="test"> 
<input type="radio" name="ans2" value="test1">
<input type="radio" name="ans2" value="test2">

<script type="text/javascript">
  var ans3 = jq("input[name='ans3']:checked").val()
  var ans2 = jq("input[name='ans2']:checked").val()
</script>

4

Se si desidera un valore vero / falso, utilizzare questo:

  $("input:radio[name=theme]").is(":checked")

3

Qualcosa del genere forse?

$("input:radio[name=theme]").click(function() { 
 ...
}); 

Quando fai clic su un pulsante di opzione, credo che finirà per essere selezionato, quindi verrà chiamato per il pulsante di opzione selezionato.


1
@ Non è valido a partire da jQuery 1.3 (addirittura obsoleto). blog.jquery.com/2009/01/05/help-test-jquery-13-beta-2 "Selettori di attributi di stile vecchi, XPath ,: [@ attr = value]. Questi sono stati deprecati per un bel po 'di tempo - e noi li stai finalmente rimuovendo. Per risolverlo basta rimuovere @! "
racerror,

3

Se hai più di un gruppo di pulsanti di opzione nella stessa pagina puoi anche provare questo per ottenere il valore del pulsante di opzione:

$("input:radio[type=radio]").click(function() {
    var value = $(this).val();
    alert(value);
});

Saluti!


2

può anche utilizzare una classe CSS per definire l'intervallo di pulsanti di opzione e quindi utilizzare quanto segue per determinare il valore

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

1

Questo ha funzionato per me ..

HTML:

<input type="radio" class="radioClass" name="radioName" value="1" />Test<br/>
<input type="radio" class="radioClass" name="radioName" value="2" />Practice<br/>
<input type="radio" class="radioClass" name="radioName" value="3" />Both<br/>

jquery:

    $ (". radioClass"). each (function () {
        if ($ (this) .IS ( ': checked'))
        alert ($ (this) .VAL ());
    });

Spero che sia d'aiuto..


0
$('input:radio[name=theme]').bind(
  'click',
  function(){
    $(this).val();
});

0

Potresti notare che l'uso del selettore di classe per ottenere il valore dei ASP.NET RadioButtoncontrolli è sempre vuoto ed ecco il motivo.

Si crea il RadioButtoncontrollo ASP.NETcome di seguito:

<asp:RadioButton runat="server" ID="rbSingle" GroupName="Type" CssClass="radios" Text="Single" />
<asp:RadioButton runat="server" ID="rbDouble" GroupName="Type" CssClass="radios" Text="Double" />
<asp:RadioButton runat="server" ID="rbTriple" GroupName="Type" CssClass="radios" Text="Triple" />

E ASP.NETrende il seguente HTML per il tuoRadioButton

<span class="radios"><input id="Content_rbSingle" type="radio" name="ctl00$Content$Type" value="rbSingle" /><label for="Content_rbSingle">Single</label></span>
<span class="radios"><input id="Content_rbDouble" type="radio" name="ctl00$Content$Type" value="rbDouble" /><label for="Content_rbDouble">Double</label></span>
<span class="radios"><input id="Content_rbTriple" type="radio" name="ctl00$Content$Type" value="rbTriple" /><label for="Content_rbTriple">Triple</label></span>

Perché ASP.NETnon vogliamo usare RadioButtonil nome o l'id di controllo perché possono cambiare per qualsiasi motivo fuori dalla mano dell'utente (cambiare il nome del contenitore, il nome del modulo, il nome del controllo utente, ...) come puoi vedere nel codice sopra.

L'unico modo possibile per ottenere il valore RadioButtondell'utilizzo di jQuery è utilizzare la classe css come indicato in questa risposta a una domanda totalmente non correlata come segue

$('span.radios input:radio').click(function() {
    var value = $(this).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.