J'ai plusieurs sélections:
<select name='strings' id="strings" multiple style="width:100px;">
<option value="Test">Test</option>
<option value="Prof">Prof</option>
<option value="Live">Live</option>
<option value="Off">Off</option>
<option value="On">On</option>
</select>
Je charge des données de ma base de données. Ensuite, j'ai une chaîne comme ceci:
var values="Test,Prof,Off";
Comment puis-je définir ces valeurs dans la sélection multiple? Déjà essayé de changer la chaîne dans un tableau et de la mettre comme valeur dans le multiple, mais ça ne marche pas ...! Quelqu'un peut il m'aider avec ça? MERCI!!!
Parcourez la boucle en utilisant la valeur d'un sélecteur dynamique utilisant le sélecteur d'attribut.
var values="Test,Prof,Off";
$.each(values.split(","), function(i,e){
$("#strings option[value='" + e + "']").prop("selected", true);
});
Exemple de travail http://jsfiddle.net/McddQ/1/
dans jQuery:
$("#strings").val(["Test", "Prof", "Off"]);
ou en JavaScript pur:
var element = document.getElementById('strings');
var values = ["Test", "Prof", "Off"];
for (var i = 0; i < element.options.length; i++) {
element.options[i].selected = values.indexOf(element.options[i].value) >= 0;
}
jQuery fait ici une abstraction significative.
Il suffit de fournir à la fonction jQuery val un tableau de valeurs:
var values = "Test,Prof,Off";
$('#strings').val(values.split(','));
Et pour obtenir les valeurs sélectionnées dans le même format:
values = $('#strings').val();
querySelectorAll
et divisez la chaîne values
.Array#forEach
pour parcourir tous les éléments du tableau values
.Array#find
pour rechercher l’option correspondant à la valeur donnée.selected
sur true
. Remarque : Array#from
transforme un objet semblable à un tablea en un tableau, puis vous pouvez utiliser des fonctions _Array.prototype
_ telles que find ou map.
_var values = "Test,Prof,Off",
options = Array.from(document.querySelectorAll('#strings option'));
values.split(',').forEach(function(v) {
options.find(c => c.value == v).selected = true;
});
_
_<select name='strings' id="strings" multiple style="width:100px;">
<option value="Test">Test</option>
<option value="Prof">Prof</option>
<option value="Live">Live</option>
<option value="Off">Off</option>
<option value="On">On</option>
</select>
_
Fondamentalement, faites un values.split(',')
puis faites une boucle dans le tableau résultant et définissez la sélection.
Pour une raison quelconque, vous n'utilisez ni jQuery ni ES6? Cela pourrait vous aider:
var values = "Test,Prof,Off";
var splitValues = values.split(',');
var multi = document.getElementById('strings');
multi.value = null; // Reset pre-selected options (just in case)
var multiLen = multi.options.length;
for (var i = 0; i < multiLen; i++) {
if (splitValues.indexOf(multi.options[i].value) >= 0) {
multi.options[i].selected = true;
}
}
<select name='strings' id="strings" multiple style="width:100px;">
<option value="Test">Test</option>
<option value="Prof">Prof</option>
<option value="Live">Live</option>
<option value="Off">Off</option>
<option value="On" selected>On</option>
</select>
var groups = ["Test", "Prof","Off"];
$('#fruits option').filter(function() {
return groups.indexOf($(this).text()) > -1; //Options text exists in array
}).prop('selected', true); //Set selected