come impostare l'opzione radio selezionata al caricamento con jQuery


297

Come impostare l'opzione radio selezionata al caricamento con jQuery?

È necessario verificare se non è stato impostato alcun valore predefinito e quindi impostare un valore predefinito


1
@ryenus l'altra domanda non sarebbe un mio duplicato da quando ho posto la mia prima dell'altra domanda?
Phill Pafford,

Risposte:


559

Supponi di avere pulsanti di opzione come questi, ad esempio:

<input type='radio' name='gender' value='Male'>
<input type='radio' name='gender' value='Female'>

E volevi controllare quello con un valore di "Male" onload se nessuna radio è stata controllata:

$(function() {
    var $radios = $('input:radio[name=gender]');
    if($radios.is(':checked') === false) {
        $radios.filter('[value=Male]').prop('checked', true);
    }
});

Mi chiedo solo Paolo, IIRC la specifica dice che l'attributo controllato deve essere controllato = "controllato" (anche se potrei sbagliarmi). JQuery traduce true in "controllato" in questo esempio? Solo curioso ...
alex,

8
Il mio esempio originale aveva "controllato", "controllato", è una di quelle cose che non ricordo mai quale sia giusto. jQuery lo capisce in entrambi i modi, ma so che se si desidera impostare l'attributo controllato effettivo di un elemento DOM, si suppone che sia un valore booleano, come document.getElementById ('x'). checked = true; - quindi ci sono andato.
Paolo Bergantino,

voglio solo aggiungere questa notazione tra parentesi quadre [nome = genere] non funziona nel browser stock di Windows Phone 7.
最 白 目

Ho appena provato con FF e jQuery 1.9.1 e .attr ('controllato', vero); non funziona, tuttavia .prop ('controllato', vero); lo fa. un'occhiata a stackoverflow.com/questions/4618733/... (? duplicato)
IARI

Uno veloce: NON usare $radios.removeAttr('checked')prima dell'elica. Confonderà il browser e i valori pubblicati.
igasparetto,

110

Che ne dici di una fodera?

$('input:radio[name="gender"]').filter('[value="Male"]').attr('checked', true);

Quanto sopra è meglio in quanto supporta valori di nomi più complessi.
J. Martin,

13
Questo non risponde completamente alla domanda operativa: deve verificare se un'opzione predefinita è già stata verificata per prima. Inoltre ora dovresti usare prop () invece di attr () per questo tipo di cose. Per una spiegazione, vedere la sezione "Attributi e proprietà" qui: api.jquery.com/prop . Inoltre, non è necessario il filtro aggiuntivo, puoi semplicemente combinare i 2 selettori, ad esempio $ ("input [nome = genere] [valore = maschio]"). Prop ("controllato", vero);
jackocnr,

3
Questa soluzione funziona per la prima volta che imposto la radio, ma in seguito fallisce. Usando "prop" invece di "attr", funziona perfettamente. Quindi: $ ('input: radio [name = "gender"]'). Filter ('[value = "Male"]'). Prop ('checked', true);
Andrew,

2
Corretto - prop () è ora il metodo raccomandato per accedere alle proprietà.
Andrew McCombe,

1
Più semplice: $ ('input: radio [name = "gender"] [value = "Male"]'). Attr ('checked', true);
Régis,

52

Questo causerà l'errore form.reset ():

$('input:radio[name=gender][value=Male]').attr('checked', true);

Ma questo funziona:

$('input:radio[name=gender][value=Male]').click();

5
ti consiglierei di usare un trigger ('click') un po 'più leggibile e di interrompere una chiamata di metodo.
Barkermn01,

35

JQuery ha in realtà due modi per impostare lo stato controllato per radio e caselle di controllo e dipende dal fatto che si stia usando o meno l'attributo value nel markup HTML:

Se hanno un attributo value:

$("[name=myRadio]").val(["myValue"]);

Se non hanno un attributo value:

$("#myRadio1").prop("checked", true);

Più dettagli

Nel primo caso, specifichiamo l'intero gruppo radio usando il nome e diciamo a JQuery di trovare la radio da selezionare usando la funzione val. La funzione val accetta un array di 1 elemento e trova la radio con il valore corrispondente, imposta il segno di spunta = vero. Altri con lo stesso nome sarebbero stati deselezionati. Se non viene trovata alcuna radio con valore corrispondente, verrà deselezionato tutto. Se ci sono più radio con lo stesso nome e valore, l'ultimo sarebbe selezionato e gli altri sarebbero deselezionati.

Se non si utilizza l'attributo value per la radio, è necessario utilizzare un ID univoco per selezionare una radio particolare nel gruppo. In questo caso, è necessario utilizzare la funzione prop per impostare la proprietà "selezionata". Molte persone non usano l'attributo value con le caselle di controllo, quindi il numero 2 è più applicabile per le caselle di controllo rispetto alle radio. Inoltre, poiché le caselle di controllo non formano un gruppo quando hanno lo stesso nome, puoi farlo $("[name=myCheckBox").prop("checked", true);per le caselle di controllo.

Puoi giocare con questo codice qui: http://jsbin.com/OSULAtu/1/edit?html, output


22

Mi è piaciuta la risposta di @Amc. Ho scoperto che l'espressione potrebbe essere ulteriormente condensata per non usare una chiamata filter () (apparentemente anche @chaiko l'ha notato). Inoltre, prop () è la strada da percorrere vs attr () per jQuery v1.6 +, consultare la documentazione jQuery per prop () per le migliori pratiche ufficiali in materia.

Considera gli stessi tag di input dalla risposta di @Paolo Bergantino.

<input type='radio' name='gender' value='Male'>
<input type='radio' name='gender' value='Female'>

Il one-liner aggiornato potrebbe essere simile a:

$('input:radio[name="gender"][value="Male"]').prop('checked', true);

15

Penso che si possa presumere che quel nome sia unico e che tutte le radio del gruppo abbiano lo stesso nome. Quindi è possibile utilizzare il supporto jQuery in questo modo:

$("[name=gender]").val(["Male"]);

Nota: il passaggio dell'array è importante.

Versione condizionata:

if (!$("[name=gender]:checked").length) {
    $("[name=gender]").val(["Male"]);
}

1
Questo è un
aspetto

@MartinBarker puoi spiegare che cosa uomini 'scannerizzando'?
Saram,

Cercando il DOM, se non usi altro che un attributo, costringi jQuery a passare ogni elemento nel DOM e verificare che corrisponda allo stesso modo che se dovessi usarlo $("*")corrisponderebbe a tutto, quindi dovresti usare un tipo in leasing $("input")o un ID sarebbe essere l'ideale in quanto il DOM ha chiamate native per ottenere un elemento tramite id
Barkermn01,

@MartinBarker - Sono d'accordo. Di solito prefisso il selettore con ID modulo o fornisco il parametro di contesto. Attualmente la scansione del DOM non è uno sforzo di jQuery ma un motore del browser interno, document.querySelectorAllfa tutto il lavoro.
Saram,

Per rispondere alle preoccupazioni precedenti, utilizzare $("input[name=gender]")o $("input[name=gender]:radio")o (per i browser moderni)$("input[name=gender][type=radio]")
David Balažic,

7

Se vuoi che sia veramente dinamico e seleziona la radio che corrisponde ai dati in arrivo, questo funziona. Sta utilizzando il valore di genere dei dati passati o utilizza l'impostazione predefinita.

if(data['gender'] == ''){
 $('input:radio[name="gender"][value="Male"]').prop('checked', true);
}else{
  $('input:radio[name="gender"][value="' + data['gender'] +'"]').prop('checked', true);
};

5

Soluzione JS nativa:

 document.querySelector('input[name=gender][value=Female]').checked = true;

http://jsfiddle.net/jzQvH/75/

HTML:

<input type='radio' name='gender' value='Male'> Male
<input type='radio' name='gender' value='Female'>Female

3

E se vuoi passare un valore dal tuo modello e vuoi selezionare un pulsante di opzione dal gruppo al caricamento in base al valore, usa:

jquery:

var priority = Model.Priority; //coming for razor model in this case
var allInputIds = "#slider-vertical-" + itemIndex + " fieldset input";

$(allInputIds).val([priority]); //Select at start up

E l'html:

<div id="@("slider-vertical-"+Model.Id)">
 <fieldset data-role="controlgroup" data-type="horizontal" data-mini="true">
    <input type="radio" name="@("radio-choice-b-"+Model.Id)" id="@("high-"+Model.Id)" value="1" checked="checked">
    <label for="@("high-"+Model.Id)" style="width:100px">@UIStrings.PriorityHighText</label>

    <input type="radio" name="@("radio-choice-b-"+Model.Id)" id="@("medium-"+Model.Id)" value="2">
    <label for="@("medium-"+Model.Id)" style="width:100px">@UIStrings.PriorityMediumText</label>

    <input type="radio" name="@("radio-choice-b-"+Model.Id)" id="@("low-"+Model.Id)" value="3">
    <label for="@("low-"+Model.Id)" style="width:100px">@UIStrings.PriorityLowText</label>
 </fieldset>
</div>

2

Non ho bisogno di tutto questo. Con HTML semplice e vecchio puoi ottenere ciò che desideri. Se lasci che la radio che desideri
<input type='radio' name='gender' checked='true' value='Male'>
venga controllata per impostazione predefinita in questo modo: quando la pagina viene caricata, verrà controllata.


3
sì, ma ho bisogno che sia dinamico in quanto il sito di riferimento passerebbe nelle impostazioni predefinite al caricamento della pagina. È passato un po 'di tempo da quando ho pensato a questa domanda, quindi spero di capire cosa stai cercando di dire
Phill Pafford,

2
 $("form input:[name=gender]").filter('[value=Male]').attr('checked', true);

6
Si prega di non pubblicare risposte di solo codice. Per favore, dai anche una spiegazione.
Lee Taylor,

2

Ecco un esempio con i metodi sopra:

<div class="ui-field-contain">
<fieldset data-role="controlgroup" data-type="horizontal">    <legend>Choose a pet:</legend>
    <input type="radio" name="radio-choice-2" id="radio-choice-1" value="choice1">
    <label for="radio-choice-1">Cat</label>

    <input type="radio" name="radio-choice-2" id="radio-choice-2" value="choice2">
    <label for="radio-choice-2">Dog</label>

    <input type="radio" name="radio-choice-2" id="radio-choice-3" value="choice3">
    <label for="radio-choice-3">Hamster</label>

    <input type="radio" name="radio-choice-2" id="radio-choice-4" value="choice4">
    <label for="radio-choice-4">Lizard</label>
  </fieldset>
</div>

In javascript:

$("[name = 'radio-choice-2'][value='choice3']").prop('checked', true).checkboxradio('refresh');

1

Nota questo comportamento quando si ottengono i valori di ingresso radio:

$('input[name="myRadio"]').change(function(e) { // Select the radio input group

    // This returns the value of the checked radio button
    // which triggered the event.
    console.log( $(this).val() ); 

    // but this will return the first radio button's value,
    // regardless of checked state of the radio group.
    console.log( $('input[name="myRadio"]').val() ); 

});

Pertanto $('input[name="myRadio"]').val(), non restituisce il valore verificato dell'ingresso radio, come ci si potrebbe aspettare, ma restituisce il valore del primo pulsante di opzione.


1

Dequesta forma Jquery contiene solo l'elemento selezionato

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

2
Devi descrivere la tua risposta e formattare il tuo codice
Michael,

0

// Se lo stai facendo su javascript o su un framework come backbone, lo incontrerai molto potresti avere qualcosa del genere

$MobileRadio = $( '#mobileUrlRadio' );

mentre

$MobileRadio.checked = true;

non funzionerà,

$MobileRadio[0].checked = true;

volere.

il tuo selettore può essere anche quello consigliato dagli altri ragazzi.


0

Funziona con più pulsanti di opzione

$('input:radio[name="Aspirant.Gender"][value='+jsonData.Gender+']').prop('checked', true);
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.