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 $select
sia 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 select
tag impostando la selected
proprietà di una corrispondenza option
con 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 boolean
parametro (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 filter
funzione 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ì