Comment sélectionner une option particulière dans un élément SELECT de jQuery?
si vous connaissez L'Index, la valeur ou le texte. aussi, si vous n'avez pas d'IDENTIFIANT pour une référence directe.
Ce , ce et ce sont tous des réponses utiles.
exemple de balisage
<div class="selDiv">
<select class="opts">
<option selected value="DEFAULT">Default</option>
<option value="SEL1">Selection 1</option>
<option value="SEL2">Selection 2</option>
</select>
</div>
19 réponses
un sélecteur pour obtenir l'option du milieu-élément par la valeur est
$('.selDiv option[value="SEL1"]')
pour un indice:
$('.selDiv option:eq(1)')
pour un texte connu:
$('.selDiv option:contains("Selection 1")')
EDIT : comme commenté ci-dessus L'OP pourrait avoir été après avoir changé l'élément sélectionné de la liste déroulante. Dans la version 1.6 et plus, la méthode prop() est recommandée:
$('.selDiv option:eq(1)').prop('selected', true)
dans les versions plus anciennes:
$('.selDiv option:eq(1)').attr('selected', 'selected')
EDIT2 : d'après le commentaire de Ryan. Un match sur "Sélection 10" pourrait être indésirable. J'ai trouvé aucun sélecteur pour correspondre au texte complet, mais un filtre fonctionne:
$('.selDiv option')
.filter(function(i, e) { return $(e).text() == "Selection 1"})
EDIT3 : faites attention avec $(e).text()
car il peut contenir une nouvelle ligne faisant la comparaison échec. Cela se produit lorsque les options sont implicitement fermées (pas d'étiquette </option>
):
<select ...>
<option value="1">Selection 1
<option value="2'>Selection 2
:
si vous utilisez simplement e.text
n'importe quel espace supplémentaire comme la nouvelle ligne arrière sera enlevé, ce qui rend la comparaison plus robuste.
aucune des méthodes ci-dessus n'a fourni la solution dont j'avais besoin alors j'ai pensé que je fournirais ce qui a fonctionné pour moi.
$('#element option[value="no"]').attr("selected", "selected");
vous pouvez juste utiliser val()
méthode:
$('select').val('the_value');
en valeur, ce qui a fonctionné pour moi avec jQuery 1.7 était le code ci-dessous, essayez ceci:
$('#id option[value=theOptionValue]').prop('selected', 'selected').change();
vous pouvez nommer le select et utiliser ceci:
$("select[name='theNameYouChose']").find("option[value='theValueYouWantSelected']").attr("selected",true);
il doit sélectionner l'option que vous voulez.
il y a plusieurs façons de faire cela, mais l'approche la plus propre a été perdue parmi les meilleures réponses et les charges d'arguments au cours de val()
. Aussi certaines méthodes changé de jQuery 1.6, donc cela nécessite une mise à jour.
pour les exemples suivants, je supposerai que la variable $select
est un objet jQuery pointant vers l'étiquette <select>
désirée, p.ex. par l'intermédiaire de ce qui suit:
var $select = $('.selDiv .opts');
Note 1-utiliser val () pour les correspondances de valeurs:
pour l'appariement des valeurs, utiliser val()
est beaucoup plus simple que d'utiliser un sélecteur d'attribut: https://jsfiddle.net/yz7tu49b/6 /
$select.val("SEL2");
la version de setter de .val()
est implémentée sur select
tags en définissant la propriété selected
d'une correspondance option
avec le même value
, fonctionne donc très bien sur tous les navigateurs modernes.
Note 2 - prop('selected', vrai):
si vous voulez définir l'état sélectionné d'une option directement, Vous pouvez utiliser prop
(pas attr
) avec un paramètre boolean
(plutôt que la valeur texte selected
):
p.ex. https://jsfiddle.net/yz7tu49b /
$option.prop('selected', true); // Will add selected="selected" to the tag
Note 3-tenir compte des valeurs inconnues:
Si vous utilisez val()
pour sélectionner un <option>
, mais val n'est pas corresponded (peut se produire selon la source des valeurs), puis "nothing" est sélectionné et $select.val()
retournera null
.
donc, pour l'exemple montré, et par souci de Robustesse, vous pourriez 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 voulez correspondre par le texte exact, vous pouvez utiliser un filter
avec la fonction. 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 pouvez avoir des espaces supplémentaires vous pouvez vouloir ajouter une garniture à la vérification comme dans
return $.trim(this.text) == "some value to match";
Note 5 - match par l'indice
si vous voulez faire correspondre par index il suffit d'indexer les enfants du select 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 de l'épreuve du futur, de sorte que pourrait également être fait comme https://jsfiddle.net/yz7tu49b/5 / :
var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);
Note 6-Utiliser le changement () pour lancer la nouvelle sélection
dans tous les cas ci-dessus, l'événement de changement ne se déclenche pas. Ceci est fait de manière à ce que vous ne vous retrouviez pas avec des événements de changement récursifs.
Pour générer l'événement de changement, si nécessaire, il suffit d'ajouter un appel à .change()
à l'objet jQuery select
. par exemple, le premier exemple le plus simple devient https://jsfiddle.net/yz7tu49b/7 /
var $select = $('.selDiv .opts');
$select.val("SEL2").change();
il y a aussi beaucoup d'autres façons de trouver les éléments en utilisant des sélecteurs d'attributs, comme [value="SEL2"]
, mais vous devez vous rappeler que les sélecteurs d'attributs sont relativement lents par rapport à toutes ces autres options.
$(elem).find('option[value="' + value + '"]').attr("selected", "selected");
répondant à ma propre question pour la documentation. Je suis sûr qu'il y a d'autres façons d'accomplir ceci, mais cela fonctionne et ce code est testé.
<html>
<head>
<script language="Javascript" src="javascript/jquery-1.2.6.min.js"></script>
<script type="text/JavaScript">
$(function() {
$(".update").bind("click", // bind the click event to a div
function() {
var selectOption = $('.selDiv').children('.opts') ;
var _this = $(this).next().children(".opts") ;
$(selectOption).find("option[index='0']").attr("selected","selected");
// $(selectOption).find("option[value='DEFAULT']").attr("selected","selected");
// $(selectOption).find("option[text='Default']").attr("selected","selected");
// $(_this).find("option[value='DEFAULT']").attr("selected","selected");
// $(_this).find("option[text='Default']").attr("selected","selected");
// $(_this).find("option[index='0']").attr("selected","selected");
}); // END Bind
}); // End eventlistener
</script>
</head>
<body>
<div class="update" style="height:50px; color:blue; cursor:pointer;">Update</div>
<div class="selDiv">
<select class="opts">
<option selected value="DEFAULT">Default</option>
<option value="SEL1">Selection 1</option>
<option value="SEL2">Selection 2</option>
</select>
</div>
</body>
</html>
en utilisant jquery-2.1.4 , j'ai trouvé la réponse suivante à travailler pour moi:
$('#MySelectionBox').val(123).change();
si vous avez une valeur string essayez ce qui suit:
$('#MySelectionBox').val("extra thing").change();
D'autres exemples n'ont pas fonctionné pour moi, c'est pourquoi j'ajoute cette réponse.
j'ai trouvé la réponse originale à: https://forum.jquery.com/topic/how-to-dynamically-select-option-in-dropdown-menu
j'utilise ceci, quand je connais l'index de la liste.
$("#yourlist :nth(1)").prop("selected","selected").change();
cela permet à la liste de changer, et de lancer l'événement de changement. Le": nth(n) "est calculé à partir de l'indice 0
je vais dire: -
$("select#my-select option") .each(function() { this.selected = (this.text == myVal); });
pour définir la valeur select avec déclenchement sélectionné:
$('select.opts').val('SEL1').change();
Pour l'option de réglage de la portée:
$('.selDiv option[value="SEL1"]')
.attr('selected', 'selected')
.change();
ce code utilise selector pour trouver l'objet select avec condition, puis changer l'attribut sélectionné par attr()
.
Plus loin, je vous recommande d'ajouter change()
événement après la définition de l'attribut selected
, en faisant cela, le code sera près à l'évolution de la sélectionner par l'utilisateur.
pour Jquery choisi si vous envoyez l'attribut à la fonction et besoin de mise à jour-Sélectionner l'option
$('#yourElement option[value="'+yourValue+'"]').attr('selected', 'selected');
$('#editLocationCity').chosen().change();
$('#editLocationCity').trigger('liszt:updated');
/* This will reset your select box with "-- Please Select --" */
<script>
$(document).ready(function() {
$("#gate option[value='']").prop('selected', true);
});
</script>
Essayez cette
vous n'utilisez que select field id au lieu de #id (c.-à-d.# select_name)
au lieu de valeur de l'option utilisez l'option valeur
<script>
$(document).ready(function() {
$("#id option[value='option value']").attr('selected',true);
});
</script>
le $('select').val('the_value');
semble la bonne solution et si vous avez des lignes de table de données alors:
$row.find('#component').val('All');
si vous ne voulez pas utiliser jQuery, vous pouvez utiliser le code ci-dessous:
document.getElementById("mySelect").selectedIndex = "2";
Merci pour la question. J'espère que ce code fonctionnera pour vous.
var val = $("select.opts:visible option:selected ").val();
essayez ce nouveau
Exactement ça fonctionne
<script>
$(document).ready(function() {
$("#id").val('select value here');
});
</script>