Scopri se il pulsante di opzione è selezionato con JQuery?


584

Posso impostare un pulsante di opzione per il controllo corretto, ma quello che voglio fare è impostare una sorta di 'listener' che si attiva quando viene selezionato un determinato pulsante di opzione.

Prendi ad esempio il seguente codice:

$("#element").click(function()
{ 
    $('#radio_button').attr("checked", "checked");
});

aggiunge un attributo controllato e tutto va bene, ma come farei per aggiungere un avviso. Ad esempio, questo si apre quando il pulsante di opzione è selezionato senza l'aiuto della funzione clic?


2
viene verificato l'eventuale duplicato del pulsante di opzione Controlla specifico
Felix Kling

1
correlate Monitoring when a radio button is unchecked stackoverflow.com/questions/5824639/...
Adrien Be

Risposte:


1082
$('#element').click(function() {
   if($('#radio_button').is(':checked')) { alert("it's checked"); }
});

Bingo! grazie David. Quindi dovrei invocare un'azione (clicca ecc.) Per mostrare l'avviso? C'è un modo per farlo senza fare clic?
Keith Donegan,

3
Questo non risolve il "senza l'aiuto della funzione clic", vero?
Znarkus,

5
@Znarkus: OP sembra soddisfatto. sosterresti che il tuo uso ('#radio_button').clickè senza click?
David Hedlund,

3
@David La seconda riga dovrebbe essere if ($('#radio_button').is(':checked'))) { alert("it's checked"); }: hai dimenticato il segno jQuery $ e quindi devi racchiuderlo tra parentesi.
zuallauz,

2
@zua: hai ragione! ha anche avuto un errore di sintassi, come era prima (parentesi senza pari). risolto
David Hedlund il

154

Se hai un gruppo di pulsanti di opzione che condividono l'attributo dello stesso nome e al momento dell'invio o qualche evento che desideri verificare se uno di questi pulsanti di opzione è stato controllato, puoi farlo semplicemente con il seguente codice:

$(document).ready(function(){
  $('#submit_button').click(function() {
    if (!$("input[name='name']:checked").val()) {
       alert('Nothing is checked!');
        return false;
    }
    else {
      alert('One of the radio buttons is checked!');
    }
  });
});

fonte

Rif. API jQuery


Questo non ha funzionato per me. Se avviso ($ ("input [@ name = 'shipping_method']: checked"). Val ()); mi dà ancora il valore anche se il pulsante di opzione non è selezionato.
AndrewC,

1
Nota: se si dispone di più moduli con gruppi di pulsanti di opzione che utilizzano lo stesso nome, è necessario assicurarsi di controllare solo quelli del modulo inviato. Un'opzione per farlo è usare il metodo find nel modulo: $('#myform').submit(function(event){ if (!$(this).find("input[name='name']:checked").val()) {
Benjamin

41

Mentre la soluzione di Parag ha gettato un errore per me, ecco la mia soluzione (che combina David Hedlund e Parag):

if (!$("input[name='name']").is(':checked')) {
   alert('Nothing is checked!');
}
else {
   alert('One of the radio buttons is checked!');
}

Questo ha funzionato bene per me!


32

Dovresti associare l'evento click della casella di controllo, poiché l'evento change non funziona in IE.

$('#radio_button').click(function(){
    // if ($(this).is(':checked')) alert('is checked'); 
    alert('check-checky-check was changed');
});

Ora, quando si modifica a livello di codice lo stato, è necessario attivare anche questo evento:

$('#radio_button').attr("checked", "checked");
$('#radio_button').click();

18

// Controlla attraverso la classe

if($("input:radio[class='className']").is(":checked")) {
     //write your code         
}

// Controlla attraverso il nome

if($("input:radio[name='Name']").is(":checked")) {
         //write your code         
}

// Controlla attraverso i dati

if($("input:radio[data-name='value']").is(":checked")) {
         //write your code         
}

10

Un altro modo è usare (jQuery> = 1.6) :prop

$("input[type=radio]").click(function () {
    if($(this).prop("checked")) { alert("checked!"); }
});

Infatti .prop()è molto più veloce e semplicemente più facile da scrivere.
Marc.277 del

10

La soluzione sarà semplice, poiché hai solo bisogno di "ascoltatori" quando viene selezionato un determinato pulsante di opzione. Fallo :-

if($('#yourRadioButtonId').is(':checked')){ 
// Do your listener's stuff here. 
}

6

Se non si desidera una funzione clic, utilizzare la funzione di modifica di Jquery

$('#radio_button :checked').live('change',function(){
alert('Something is checked.');
});

Questa dovrebbe essere la risposta che stai cercando. se stai usando la versione di Jquery sopra la 1.9.1 prova ad usarla perché la funzione live era stata deprecata.


6

... Grazie ragazzi ... tutto ciò di cui avevo bisogno era il "valore" del pulsante di opzione selezionato in cui ogni pulsante di opzione nel set aveva un ID diverso ...

 var user_cat = $("input[name='user_cat']:checked").val();

per me va bene...


Risposta più utile
amal50,

5

Lavorare con tutti i tipi di pulsanti di opzione e browser

if($('#radio_button_id')[0].checked) {
   alert("radiobutton checked")
}
else{
   alert("not checked");
}

Lavoro Jsfiddle qui


3

Pulsante di opzione generato dinamicamente Controlla che la radio ottenga un valore

$("input:radio[name=radiobuttonname:checked").val();

Al cambio pulsante di opzione dinamico

$('input[name^="radioname"]').change(function () {if (this.value == 2) { }else{}});

3

$ ('. radio-button-class-name'). is ('controllato') non ha funzionato per me, ma il codice successivo ha funzionato bene:

    if(typeof $('.radio-button-class-name:checked').val() !== 'undefined'){
     // radio button is checked
    }

1
Dato che l'hai usato con una classe anziché un ID, avrebbe restituito una lista di nomi, anziché un elemento. $('.radio-button-class-name').first().is(':checked')avrebbe dovuto funzionare.
Levi Johansen,

2

prova questo

    if($('input[name="radiobutton"]:checked').length == 0) {
        alert("Radio buttons are not checked");
    }


0

jQuery è ancora popolare, ma se non si desidera avere dipendenze, vedere di seguito. Funzione breve e chiara per scoprire se il pulsante di opzione è selezionato su ES-2015:

function getValueFromRadioButton( name ){
  return [...document.getElementsByName(name)]
         .reduce( (rez, btn) => (btn.checked ? btn.value : rez), null)
}

console.log( getValueFromRadioButton('payment') );
<div>  
  <input type="radio" name="payment" value="offline">
  <input type="radio" name="payment" value="online">
  <input type="radio" name="payment" value="part" checked>
  <input type="radio" name="payment" value="free">
</div>


-3
$("#radio_1").prop("checked", true);

Per le versioni di jQuery precedenti alla 1.6, utilizzare:

$("#radio_1").attr('checked', 'checked');

2
Questo imposta il valore della checkedproprietà, anziché interrogarla.
Marc.2377
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.