Dans mon HTML, j'ai un <select>
avec trois éléments <option>
. Je souhaite utiliser jQuery pour vérifier la valeur de chaque option par rapport à une variable Javascript var
. Si l'un correspond, je veux définir l'attribut sélectionné de cette option. Comment je ferais ça?
Utiliser du vieux JavaScript ordinaire:
var val = "Fish";
var sel = document.getElementById('sel');
document.getElementById('btn').onclick = function() {
var opts = sel.options;
for (var opt, j = 0; opt = opts[j]; j++) {
if (opt.value == val) {
sel.selectedIndex = j;
break;
}
}
}
<select id="sel">
<option>Cat</option>
<option>Dog</option>
<option>Fish</option>
</select>
<button id="btn">Select Fish</button>
Mais si vous vraiment voulez utiliser jQuery:
var val = 'Fish';
$('#btn').on('click', function() {
$('#sel').val(val);
});
var val = 'Fish';
$('#btn').on('click', function() {
$('#sel').val(val);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select id="sel">
<option>Cat</option>
<option>Dog</option>
<option>Fish</option>
</select>
<button id="btn">Select Fish</button>
Si vos options ont des attributs de valeur qui diffèrent de leur contenu de texte et que vous souhaitez sélectionner via le contenu de texte:
<select id="sel">
<option value="1">Cat</option>
<option value="2">Dog</option>
<option value="3">Fish</option>
</select>
<script>
var val = 'Fish';
$('#sel option:contains(' + val + ')').prop({selected: true});
</script>
Mais si vous avez configuré la configuration ci-dessus et que vous souhaitez sélectionner une valeur à l'aide de jQuery, vous pouvez procéder comme auparavant:
var val = 3;
$('#sel').val(val);
Pour les navigateurs prenant en charge document.querySelector
et la propriété HTMLOptionElement::selected
, il s'agit d'une méthode plus succincte pour accomplir cette tâche:
var val = 3;
document.querySelector('#sel [value="' + val + '"]').selected = true;
<select data-bind="value: val">
<option value="1">Cat</option>
<option value="2">Dog</option>
<option value="3">Fish</option>
</select>
<script>
var viewModel = {
val: ko.observable()
};
ko.applyBindings(viewModel);
viewModel.val(3);
</script>
<template id="template" is="dom-bind">
<select value="{{ val }}">
<option value="1">Cat</option>
<option value="2">Dog</option>
<option value="3">Fish</option>
</select>
</template>
<script>
template.val = 3;
</script>
Remarque: ceci n'a pas été mis à jour pour la version stable finale.
<app id="app">
<select [value]="val">
<option value="1">Cat</option>
<option value="2">Dog</option>
<option value="3">Fish</option>
</select>
</app>
<script>
var App = ng.Component({selector: 'app'})
.View({template: app.innerHTML})
.Class({constructor: function() {}});
ng.bootstrap(App).then(function(app) {
app._hostComponent.instance.val = 3;
});
</script>
<div id="app">
<select v-model="val">
<option value="1">Cat</option>
<option value="2">Dog</option>
<option value="3">Fish</option>
</select>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
val: null,
},
mounted: function() {
this.val = 3;
}
});
</script>
Aucun des exemples utilisant jquery ici n'est en réalité correct car ils laisseront la sélection afficher la première entrée même si la valeur a été modifiée.
La bonne façon de sélectionner l'Alaska et d'afficher le bon élément comme sélectionné en utilisant:
<select id="state">
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
<option value="AZ">Arizona</option>
</select>
Avec jQuery serait:
$('#state').val('AK').change();
<select id="my_select">
<option value="1">First</option>
<option value="2">Second</option>
<option value="3">Third</option>
</select>
var my_value = 2;
$('#my_select option').each(function(){
var $this = $(this); // cache this jQuery object to avoid overhead
if ($this.val() == my_value) { // if this option's value is equal to our value
$this.prop('selected', true); // select this option
return false; // break the loop, no need to look further
}
});
Vous pouvez modifier la valeur de l'élément select, ce qui remplace l'option sélectionnée par celle qui a cette valeur, à l'aide de JavaScript:
document.getElementById('sel').value = 'bike';
Je souhaite modifier la valeur et le contenu du contenu de l'option sélectionnée de l'élément sélectionné en "Mango".
Le code le plus simple qui a fonctionné est ci-dessous:
var newValue1 = 'Mango'
var selectElement = document.getElementById('myselectid');
selectElement.options[selectElement.selectedIndex].value = newValue1;
selectElement.options[selectElement.selectedIndex].textContent = newValue1;
J'espère que ça aide quelqu'un. Bonne chance.
Jusqu'à vote si cela vous a aidé.
var vals = [2,'c'];
$('option').each(function(){
var $t = $(this);
for (var n=vals.length; n--; )
if ($t.val() == vals[n]){
$t.prop('selected', true);
return;
}
});
var vals = ['Two','CCC']; // what we're looking for is different
$('option').each(function(){
var $t = $(this);
for (var n=vals.length; n--; )
if ($t.text() == vals[n]){ // method used is different
$t.prop('selected', true);
return;
}
});
<select>
<option value=""></option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<select>
<option value=""></option>
<option value="a">AAA</option>
<option value="b">BBB</option>
<option value="c">CCC</option>
</select>
J'ai utilisé presque toutes les réponses affichées ici, mais je ne suis pas à l'aise avec cela, alors j'ai creusé un pas supplémentaire et trouvé une solution facile qui répond à mes besoins et me valait la peine de partager avec vous les gars.
Au lieu de parcourir toutes les options ou d’utiliser JQuery vous pouvez utiliser CoreJSpar étapes simples:
Exemple
<select id="org_list">
<option value="23">IBM</option>
<option value="33">Dell</option>
<option value="25">SONY</option>
<option value="29">HP</option>
</select>
Vous devez donc connaître la valeur de l'option à sélectionner.
function selectOrganization(id){
org_list=document.getElementById('org_list');
org_list.selectedIndex=org_list.querySelector('option[value="'+id+'"]').index;
}
Comment utiliser?
selectOrganization(25); //this will select SONY from option List
Vos commentaires sont les bienvenus. :) AzmatHunzai.
Excellentes réponses - voici la version D3 pour ceux qui cherchent:
<select id="sel">
<option>Cat</option>
<option>Dog</option>
<option>Fish</option>
</select>
<script>
d3.select('#sel').property('value', 'Fish');
</script>
Je l'ai utilisé après la mise à jour d'un registre et la modification de l'état de la requête via ajax, puis une requête avec le nouvel état dans le même script et l'a placé dans le nouvel état de l'élément de balise select pour mettre à jour la vue.
var objSel = document.getElementById("selectObj");
objSel.selectedIndex = elementSelected;
J'espère que c'est utile.
Après beaucoup de recherches, j'ai essayé @kzh sur une liste de sélection où je ne connais que option
texte intérieur non value
attribut, Code basé sur la réponse sélectionnée, je l'ai utilisé pour modifier l'option de sélection en fonction de la page actuelle url
de ce format http://www.example.com/index.php?u=Steve
<select id="sel">
<option>Joe</option>
<option>Steve</option>
<option>Jack</option>
</select>
<script>
var val = window.location.href.split('u=')[1]; // to filter ?u= query
var sel = document.getElementById('sel');
var opts = sel.options;
for(var opt, j = 0; opt = opts[j]; j++) {
// search are based on text inside option Attr
if(opt.text == val) {
sel.selectedIndex = j;
break;
}
}
</script>
Ceci conservera les paramètres url
affichés comme sélectionnés pour le rendre plus convivial et le visiteur saura quelle page ou quel profil il est en train de consulter.