Il existe un certain nombre de façons de le faire, mais l'approche la plus propre a été perdue parmi les meilleures réponses et des tas d'arguments val()
. Certaines méthodes ont également changé à partir de jQuery 1.6, donc cela nécessite une mise à jour.
Pour les exemples suivants, je suppose que la variable $select
est un objet jQuery pointant sur la <select>
balise souhaitée , par exemple via ce qui suit:
var $select = $('.selDiv .opts');
Remarque 1 - utilisez val () pour les correspondances de valeurs:
Pour la correspondance des valeurs, l'utilisation val()
est beaucoup plus simple que l'utilisation d'un sélecteur d'attribut: https://jsfiddle.net/yz7tu49b/6/
$select.val("SEL2");
La version setter de .val()
est implémentée sur les select
balises en définissant la selected
propriété d'une correspondance option
avec la même chose value
, elle fonctionne donc très bien sur tous les navigateurs modernes.
Remarque 2 - utilisez prop («sélectionné», vrai):
Si vous souhaitez définir directement l'état sélectionné d'une option, vous pouvez utiliser prop
(pas attr
) avec un boolean
paramètre (plutôt que la valeur de texte selected
):
par exemple https://jsfiddle.net/yz7tu49b/
$option.prop('selected', true); // Will add selected="selected" to the tag
Remarque 3 - autorisez les valeurs inconnues:
Si vous utilisez val()
pour sélectionner un <option>
, mais que la val ne correspond pas (cela peut se produire en fonction de la source des valeurs), alors "rien" est sélectionné et $select.val()
revient null
.
Donc, pour l'exemple montré, et pour des raisons de robustesse, vous pouvez utiliser quelque chose comme ceci https://jsfiddle.net/1250Ldqn/ :
var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
$select.val("DEFAULT");
}
Note 4 - correspondance exacte du texte:
Si vous souhaitez faire correspondre le texte exact, vous pouvez utiliser une filter
fonction avec. par exemple https://jsfiddle.net/yz7tu49b/2/ :
var $select = $('.selDiv .opts');
$select.children().filter(function(){
return this.text == "Selection 2";
}).prop('selected', true);
bien que si vous avez des espaces supplémentaires, vous souhaiterez peut-être ajouter une garniture au chèque comme dans
return $.trim(this.text) == "some value to match";
Note 5 - correspondance par index
Si vous voulez faire correspondre par index, il suffit d'indexer les enfants de la sélection, par exemple https://jsfiddle.net/yz7tu49b/3/
var $select = $('.selDiv .opts');
var index = 2;
$select.children()[index].selected = true;
Bien que j'ai tendance à éviter les propriétés DOM directes en faveur de jQuery de nos jours, au code à l'épreuve du temps, de sorte que cela pourrait également être fait comme https://jsfiddle.net/yz7tu49b/5/ :
var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);
Remarque 6 - utilisez change () pour déclencher la nouvelle sélection
Dans tous les cas ci-dessus, l'événement de modification ne se déclenche pas. Ceci est voulu par la conception afin que vous ne vous retrouviez pas avec des événements de changement récursifs.
Pour générer l'événement change, si nécessaire, ajoutez simplement un appel .change()
à l' select
objet jQuery . Par exemple, le tout premier exemple le plus simple devient https://jsfiddle.net/yz7tu49b/7/
var $select = $('.selDiv .opts');
$select.val("SEL2").change();
Il existe également de nombreuses autres façons de trouver les éléments à l'aide de sélecteurs d'attributs [value="SEL2"]
, mais vous devez vous rappeler que les sélecteurs d'attributs sont relativement lents par rapport à toutes ces autres options.
$("#my_select").val("the_new_value").change();
... ... de so