Esistono diversi modi per farlo, ma l'approccio più pulito è stato perso tra le risposte migliori e molte discussioni val(). Inoltre alcuni metodi sono stati modificati a partire da jQuery 1.6, quindi è necessario un aggiornamento.
Per i seguenti esempi supporrò che la variabile $selectsia un oggetto jQuery che punta al <select>tag desiderato , ad esempio tramite quanto segue:
var $select = $('.selDiv .opts');
Nota 1: utilizzare val () per le corrispondenze di valori:
Per la corrispondenza dei valori, l'utilizzo val()è molto più semplice rispetto all'utilizzo di un selettore di attributi: https://jsfiddle.net/yz7tu49b/6/
$select.val("SEL2");
La versione setter di .val()è implementata sui selecttag impostando la selectedproprietà di una corrispondenza optioncon la stessavalue , quindi funziona perfettamente su tutti i browser moderni.
Nota 2 - usa prop ('selezionato', vero):
Se si desidera impostare direttamente lo stato selezionato di un'opzione, è possibile utilizzare prop(non attr) con un booleanparametro (anziché il valore del testoselected ):
ad es. https://jsfiddle.net/yz7tu49b/
$option.prop('selected', true); // Will add selected="selected" to the tag
Nota 3 - consentire valori sconosciuti:
Se si utilizza val()per selezionare un <option>, ma la val non corrisponde (potrebbe accadere a seconda della fonte dei valori), allora "nulla" è selezionato e $select.val()restituirànull .
Quindi, per l'esempio mostrato, e per motivi di robustezza, potresti usare qualcosa del genere https://jsfiddle.net/1250Ldqn/ :
var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
$select.val("DEFAULT");
}
Nota 4 - corrispondenza esatta del testo:
Se si desidera abbinare il testo esatto, è possibile utilizzare una filterfunzione with. ad es. https://jsfiddle.net/yz7tu49b/2/ :
var $select = $('.selDiv .opts');
$select.children().filter(function(){
return this.text == "Selection 2";
}).prop('selected', true);
anche se se si dispone di spazi bianchi extra è possibile che si desideri aggiungere un taglio al controllo come in
return $.trim(this.text) == "some value to match";
Nota 5: corrispondenza per indice
Se vuoi abbinare per indice basta indicizzare i figli della selezione es. Https://jsfiddle.net/yz7tu49b/3/
var $select = $('.selDiv .opts');
var index = 2;
$select.children()[index].selected = true;
Anche se tendo ad evitare le proprietà DOM dirette a favore di jQuery al giorno d'oggi, a codice a prova di futuro, in modo che possa essere fatto anche come https://jsfiddle.net/yz7tu49b/5/ :
var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);
Nota 6: utilizzare change () per attivare la nuova selezione
In tutti i casi precedenti, l'evento change non si attiva. Questo è in base alla progettazione in modo da non finire con eventi di cambiamento ricorsivo.
Per generare l'evento change, se necessario, basta aggiungere una chiamata all'oggetto .change()jQuery select. ad esempio il primo esempio più semplice diventa https://jsfiddle.net/yz7tu49b/7/
var $select = $('.selDiv .opts');
$select.val("SEL2").change();
Ci sono anche molti altri modi per trovare gli elementi usando selettori di attributi, come [value="SEL2"], ma devi ricordare che i selettori di attributi sono relativamente lenti rispetto a tutte queste altre opzioni.
$("#my_select").val("the_new_value").change();... ... da così