Selezionare radiobox da jQuery

Quando selezioniamo un componente radiobox col mouse succedono almeno due cose:

  1. Il pallino del radiobox viene annerito ad indicare che è selezionato;
  2. Viene lanciato un evento javascript di tipo onchange, che volendo può essere intercettato.

Supponiamo di avere un gruppo di radiobox che rappresentano colori:

<input name="colori" type="radio" value="red" /> Rosso 
<input name="colori" type="radio" value="green" /> Verde 
<input name="colori" type="radio" value="blue" /> Blu
 
<span id="risposta"></span>

Grazie alla potenza di jQuery è semplice intercettare l'evento onchange quando si seleziona un radiobox:

$("input[name=colori]:radio").change(function(){
    $("#risposta").html(this.value);
    $("#risposta").css("color",this.value);
});

Quando si seleziona un radiobox, il corrispondente colore viene scritto in un elemento span con id="risposta". Da notare anche come sia semplice modificare lo stile di un elemento.

Ma come si potrebbe simulare il click del mouse da jQuery?

 
var colore ="red";
 
if(colore != ""){
   $("input[value="+colore+"]:radio").attr('checked', true);
}

Attraverso il metodo attr(), risulta semplice modificare l'attributo checked del radiobox.

Sembrerebbe bastare, ma la modifica dell'attributo checked attraverso il metodo attr() ottiene come risultato la sola selezione del radiobox, senza lanciare alcun evento onchange.

Dando il valore “red” alla variabile colore, si ottiene la selezione del radiobox corrispondente, ma non viene scritto nulla nell'elemento con id=”risposta”. Questo perchè attraverso la sola modifica dell'attributo col metodo attr() non viene lanciato l'evento onchange.

Si può però lanciare l'evento onchange manualmente attraverso il codice

 
 $("input[value="+colore+"]:radio").change();

Il codice finale è

<input name="colori" type="radio" value="red" />Rosso
<input name="colori" type="radio" value="green" />Verde
<input name="colori" type="radio" value="blue" />Blu
 
<span id="risposta"></span>
 
<script type="text/javascript">
var colore ="red";
 
if(colore != ""){
    $("input[value="+colore+"]:radio").attr('checked', true);
}
 
$("input[name=colori]:radio").change(function(){
         $("#risposta").html(this.value);
         $("#risposta").css("color",this.value);
});
 
$("input[value="+colore+"]:radio").change();
</script>

Guarda il risultato