Imposta la radio selezionata dal gruppo radio con un valore


153

Perché sto lottando con questo?

Ho un valore: 5

Come controllo il pulsante di opzione del gruppo "mygroup" con il valore di 5?

$("input[name=mygroup]").val(5); // doesn't work?

Risposte:


351

Con l'aiuto del selettore di attributi è possibile selezionare l'elemento di input con il valore corrispondente. Quindi devi impostare l'attributo esplicitamente, usando .attr:

var value = 5;
$("input[name=mygroup][value=" + value + "]").attr('checked', 'checked');

Da jQuery 1.6, puoi anche usare il .propmetodo con un valore booleano (questo dovrebbe essere il metodo preferito):

$("input[name=mygroup][value=" + value + "]").prop('checked', true);

Ricorda che devi prima rimuovere l'attributo controllato da uno qualsiasi dei pulsanti di opzione in un solo gruppo di pulsanti di opzione, quindi sarai in grado di aggiungere proprietà / attributi selezionati a uno dei pulsanti di opzione in quel gruppo di pulsanti di opzione.

Codice per rimuovere l'attributo controllato da tutti i pulsanti di opzione di un gruppo di pulsanti di opzione:

$('[name="radioSelectionName"]').removeAttr('checked');

.prop ('checked', true) è probabilmente migliore o .is ()
bladefist,

3
@bladefist: .isnon aiuterei qui, ma sono d'accordo .prop. Allora non era disponibile;) Aggiornerà la mia risposta. Grazie!
Felix Kling,

4
Se il valore del pulsante di opzione ha un decimale, devi inserire il valore tra virgolette
Robert

1
@Robert: Sì, probabilmente. Dalla documentazione : "Può essere una singola parola non quotata o una stringa tra virgolette".
Felix Kling,

5
Vedi la risposta di Jonathan. I documenti jQuery mostrano che .val()supporta l'impostazione di valori su gruppi radio o di caselle di controllo. Il modo in cui questa risposta funziona tecnicamente, ma è rotonda e molto meno leggibile / memorabile.
jinglesthula,

144

C'è un modo migliore di controllare le radio e la casella di controllo; devi passare una matrice di valori al metodo val anziché un valore non elaborato

Nota: se si passa semplicemente il valore da solo (senza essere all'interno di un array ), ciò comporterà l'impostazione di tutti i valori di "mygroup" sul valore.

$("input[name=mygroup]").val([5]);

Ecco il documento jQuery che spiega come funziona: http://api.jquery.com/val/#val-value

E .val([...])funziona anche con elementi di modulo come <input type="checkbox">, <input type="radio">e <option>c'è dentro di una <select>.

Gli input e le opzioni che hanno un valore che corrisponde a uno degli elementi dell'array saranno controllati o selezionati, mentre quelli che hanno un valore che non corrispondono a uno degli elementi dell'array saranno deselezionati o deselezionati

Fiddle dimostrando questo lavoro: https://jsfiddle.net/92nekvp3/


Risposta accettata (beh, dovrebbe essere). A partire da jQuery 1.0, vedi l'ultimo esempio da docs (scorri verso il basso): api.jquery.com/val Copia qui: jsfiddle.net/JoePC/w1f9ykso
JoePC

Questo è un modo piacevole e coerente per impostare tutti i valori di input. Peccato che mi ci sono voluti 6 anni per conoscerlo.
Jeff Lowery,

1
Trascorso un bel po 'di tempo cercando di capire perché tutti i miei valori nel gruppo venivano impostati sul valore passato invece di controllare il valore. Risulta che ho passato il valore da solo, non all'interno di un array.
OXiGEN,


8
$("input[name='mygroup'][value='5']").attr("checked", true);

7

Quando si modifica il valore dell'attributo come menzionato sopra, l' changeevento non viene attivato, quindi se necessario per alcuni motivi è possibile attivarlo in questo modo

$('input[name=video_radio][value="' + r.data.video_radio + '"]')
       .prop('checked', true)
       .trigger('change');


1

Oppure puoi semplicemente scrivere l'attributo value su di esso:

$(':radio[value=<yourvalue>]').attr('checked',true);

Questo funziona per me.


0
var key = "Name_radio";
var val = "value_radio";
var rdo = $('*[name="' + key + '"]');
if (rdo.attr('type') == "radio") {
 $.each(rdo, function (keyT, valT){
   if ((valT.value == $.trim(val)) && ($.trim(val) != '') && ($.trim(val) != null))

   {
     $('*[name="' + key + '"][value="' + (val) + '"]').prop('checked', true);
   }
  })
}

4
Puoi spiegare cosa fa il tuo codice nella tua risposta? Almeno una frase o giù di lì. E come risolve la soluzione. Grazie.
Alex,

0

Versione pura di JavaScript:

document.querySelector('input[name="myradio"][value="5"]').checked = true;

-1
$('input[name="mygroup"]').val([5])

1
Puoi spiegarci cosa rende la tua soluzione diversa dalle altre già fornite?
Giovani Vercauteren,

@Giovani Vercauteren, dovremmo dare il nome come una stringa. Quindi do mygroup come stringa nel codice.
Anjitha,
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.