Come effettuare la prima opzione di <select> selezionata con jQuery


548

Come faccio la prima opzione di selezionato con jQuery?

<select id="target">
  <option value="1">...</option>
  <option value="2">...</option>
</select>

Risposte:


957
$("#target").val($("#target option:first").val());

364
Va notato che ciò è più semplice con $ ("# target") [0] .selectedIndex = 0;
David Andres,

17
Funziona, ma si basa sul valore del primo elemento , se il primo elemento contiene un valore vuoto, selezionerà l'elemento più vicino CON valore
evilReiko

2
Sembra funzionare alla grande, tranne IE6. Incerto sul 7-8, funziona il 9.
Nicholi,

3
Ho ritrattato la mia precedente dichiarazione, mi stavo anticipando. $ ( "# target") val ( "opzione: prima."); funziona quasi ovunque ma IE6 $ ("target"). val ($ ("# target option: first"). val ()); funzionerà in IE6, perché stai letteralmente cercando il primo valore e inserendolo come valore di destinazione. Due ricerche ID invece di una.
Nicholi,

2
Ed è effettivamente necessario per IE6, 7 e 8. Considerando che .val ('opzione: prima') funziona in IE9 (e Safari, Firefox, Chrome e Opera).
Nicholi,

178

Puoi provare questo

$("#target").prop("selectedIndex", 0);

2
Questo non funziona correttamente in tutti i casi. Ho un menu a discesa a cascata genitore / figlio. Seleziona genitore n. 1, visualizza figlio n. 1, seleziona genitore n. 2 visualizza figlio n. 2. Ogni volta che selezionano un nuovo genitore dovrebbe riportare il figlio corrispondente alla prima opzione. Questa soluzione non lo fa. Lascia il menu figlio "appiccicoso". Vedi l'opzione: selected.prop ('Selected', false) / option: first.prop ('Selected', 'Selected') soluzione su questa domanda per la risposta che funziona in più scenari.
Lance Cleveland,

questo non attiva l'evento onChange. Almeno in cromo.
Tomasz Mularczyk,

Grazie! Questa è la prima risposta nell'elenco delle risposte che ha funzionato per me.
Casey Crookston,

6
@Tomasz$("#target").prop("selectedIndex", 0).change();
mplungjan,

@Romesh come posso impostare la base selectedIndex sul valore?
Junior Frogie,

111
// remove "selected" from any options that might already be selected
$('#target option[selected="selected"]').each(
    function() {
        $(this).removeAttr('selected');
    }
);


// mark the first option as selected
$("#target option:first").attr('selected','selected');

1
Buon secondo approccio. Aggiungi il valore dell'attributo selezionato. Ad esempio, attr ("selezionato", "selezionato"). Senza questo parametro aggiuntivo, la selezione non viene effettuata.
David Andres,

@EgorPavlikhin - Ho appena modificato la risposta per includere il codice JQuery per rimuovere il flag "selezionato" da tutte le opzioni che potrebbero essere già state selezionate. Ora la risposta è corretta :)
jmort253,

20
Non è necessario per la eachfunzione, dovrebbe essere: $('#target option[selected="selected"]').removeAttr('selected')anche ora dovrebbe essere usato con removePrope propinvece.
vsync,

Una versione più approfondita della risposta di James Lee Baker altrove su questa domanda, sebbene aggiunga cicli di calcolo che potrebbero non essere necessari se l'interfaccia è ben gestita.
Lance Cleveland,

65

Quando si usa

$("#target").val($("#target option:first").val());

questo non funzionerà in Chrome e Safari se il primo valore di opzione è null.

preferisco

$("#target option:first").attr('selected','selected');

perché può funzionare in tutti i browser.


3
È inoltre necessario "deselezionare" tutti gli elementi precedentemente selezionati affinché ciò funzioni in più casi. Vedi la risposta di James Lee Baker per i dettagli.
Lance Cleveland,

44

La modifica del valore dell'input di selezione o la regolazione dell'attributo selezionato possono sovrascrivere la proprietà selectedOptions predefinita dell'elemento DOM, causando un elemento che potrebbe non ripristinarsi correttamente in un modulo in cui è stato chiamato l'evento di ripristino.

Utilizzare il metodo prop di jQuery per cancellare e impostare l'opzione necessaria:

$("#target option:selected").prop("selected", false);
$("#target option:first").prop("selected", "selected");

3
Perfetto. Ho dei menu a discesa a cascata. Quando un utente seleziona l'opzione genitore 2, quindi l'opzione figlio 3 non voglio che si attacchi. In altre parole, l'utente seleziona il genitore n. 1, quindi seleziona nuovamente il genitore n. 2. Quando ciò accade, voglio che il menu figlio ripristini la prima opzione (che è "Qualsiasi" nel mio caso). Tutte le altre soluzioni qui falliscono su Firefox v19 e Chrome su Linux.
Lance Cleveland,

33
$("#target")[0].selectedIndex = 0;

1
Ciò non funzionerà nei casi in cui un menu a discesa ha un elemento preselezionato. Vedi i miei commenti sulla risposta selezionata per i dettagli.
Lance Cleveland,

21

Un punto sottile che penso di aver scoperto sulle risposte più votate è che anche se cambiano correttamente il valore selezionato, non aggiornano l'elemento che l'utente vede (solo quando fanno clic sul widget vedranno un segno di spunta accanto al elemento aggiornato).

Anche il concatenamento di una chiamata .change () alla fine aggiornerà anche il widget UI.

$("#target").val($("#target option:first").val()).change();

(Nota che ho notato questo mentre usavo jQuery Mobile e una scatola sul desktop Chrome, quindi questo potrebbe non essere il caso ovunque).


Anche il concatenamento di una chiamata .change () alla fine aggiornerà anche il widget UI.
codemirror,

17

Se hai disabilitato le opzioni, potresti non aggiungere ([disabilitato]) per impedire di selezionarle, il che si traduce in quanto segue:

$("#target option:not([disabled]):first").attr('selected','selected')

1
Un buon punto sulle opzioni disabilitate. Bella aggiunta alle risposte presentate!
Lance Cleveland,

16

Un altro modo per ripristinare i valori (per più elementi selezionati) potrebbe essere questo:

$("selector").each(function(){

    /*Perform any check and validation if needed for each item */

    /*Use "this" to handle the element in javascript or "$(this)" to handle the element with jquery */

    this.selectedIndex=0;

});

4
+1 è in realtà una buona risposta, ma avresti potuto renderlo più specifico al dominio della domanda; invece di $("selector")te avresti potuto semplicemente scrivere$('#target')
Ja͢ck


7
$('#newType option:first').prop('selected', true);

Funziona solo se non ci sono già opzioni selezionate. Vedi la risposta di James Lee Baker.
Webars,

6

Ho scoperto che solo l'impostazione di attr selezionato non funziona se esiste già un attributo selezionato. Il codice che uso ora disinserirà prima l'attributo selezionato, quindi selezionerà la prima opzione.

$('#target').removeAttr('selected').find('option:first').attr('selected', 'selected');

Funziona bene ed è molto simile alla risposta di James Lee Baker annotata altrove su questa domanda. Mi piace l'altra risposta con opzione: selezionata e opzione: prima come esecuzione dell'opzione: prima è probabile che sia più veloce (dal punto di vista del calcolo) di find ().
Lance Cleveland,

5

Sebbene ciascuna funzione probabilmente non sia necessaria ...

$('select').each(function(){
    $(this).find('option:first').prop('selected', 'selected');
});

per me va bene.


5

Ecco come lo farei:

$("#target option")
    .removeAttr('selected')
    .find(':first')     // You can also use .find('[value=MyVal]')
        .attr('selected','selected');

1
Funziona bene ed è molto simile alla risposta di James Lee Baker annotata altrove su questa domanda. Mi piace l'altra risposta con opzione: selezionata e opzione: prima come esecuzione dell'opzione: prima è probabile che sia più veloce (dal punto di vista del calcolo) di find ().
Lance Cleveland,

2

Alla fine ha funzionato solo con un trigger ('change'), in questo modo:

$("#target option:first").attr('selected','selected').trigger('change');

2

Se hai intenzione di utilizzare la prima opzione come un valore predefinito

<select>
    <option value="">Please select an option below</option>
    ...

allora puoi semplicemente usare:

$('select').val('');

È bello e semplice.



1

Sul retro della risposta di James Lee Baker, preferisco questa soluzione poiché rimuove la dipendenza dal supporto del browser per: primo: selezionato ...

$('#target').children().prop('selected', false);
$($('#target').children()[0]).prop('selected', 'selected');

1

Per me ha funzionato solo quando ho aggiunto il seguente codice:

.change();

Per me ha funzionato solo quando ho aggiunto il seguente codice: Siccome volevo "resettare" il modulo, cioè selezionare tutte le prime opzioni di tutte le selezioni del modulo, ho usato il seguente codice:

$('form').find('select').each(function(){ $(this).val($("select option:first").val()); $(this).change(); });


1

Uso:

$("#selectbox option:first").val()

Si prega di trovare il lavoro semplice in questo JSFiddle .


Che ne dici di posizioni 15, 25 o con testo specifico? : D
Marcelo Agimóvel

La chiamata .val()ottiene solo il valore della prima opzione nell'elenco. In realtà non seleziona (rende selezionata) la prima opzione, come è stato chiesto nella domanda originale.
Funka,

1

Per me, ha funzionato solo quando ho aggiunto la seguente riga di codice

$('#target').val($('#target').find("option:first").val());


0

Se stai memorizzando l'oggetto jQuery dell'elemento select:

var jQuerySelectObject = $("...");

...

jQuerySelectObject.val(jQuerySelectObject.children().eq(0).val());

0

Controlla questo migliore approccio usando jQuery con ECMAScript 6 :

$('select').each((i, item) => {
  var $item = $(item);
  $item.val($item.find('option:first').val()); 
});

0

È possibile selezionare qualsiasi opzione dropdownda usandola.

// 'N' can by any number of option.  // e.g.,  N=1 for first option
$("#DropDownId").val($("#DropDownId option:eq(N-1)").val()); 

0

$('select#id').val($('#id option')[index].value)

Sostituisci l' id con un particolare ID di selezione tag e indicizza con l'elemento particolare che desideri selezionare.

vale a dire

<select class="input-field" multiple="multiple" id="ddlState" name="ddlState">
                                        <option value="AB">AB</option>
                                        <option value="AK">AK</option>
                                        <option value="AL">AL</option>
</select>

Quindi qui per la selezione del primo elemento userò il seguente codice:

$('select#ddlState').val($('#ddlState option')[0].value)

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.