J'ai un contrôle de sélection, et dans une variable javascript, j'ai une chaîne de texte.
Avec jQuery, je souhaite définir l’élément sélectionné du contrôle de sélection comme étant l’élément avec la description textuelle que j’ai (par opposition à la valeur que je n’ai pas).
Je sais que le réglage par valeur est assez trivial. par exemple.
$("#my-select").val(myVal);
Mais je suis un peu surpris de le faire via la description textuelle. J'imagine qu'il doit y avoir un moyen de tirer profit de la description textuelle, mais mon cerveau est trop dur vendredi après-midi pour pouvoir y arriver.
var text1 = 'Two';
$("select option").filter(function() {
//may want to use $.trim in here
return $(this).text() == text1;
}).prop('selected', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select>
<option value="0">One</option>
<option value="1">Two</option>
</select>
var text1 = 'Two';
$("select option").filter(function() {
//may want to use $.trim in here
return $(this).text() == text1;
}).attr('selected', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>
<select>
<option value="0">One</option>
<option value="1">Two</option>
</select>
Notez que cette approche fonctionnera dans les versions supérieures à 1.6 mais inférieures à 1.9, mais elle est déconseillée depuis la version 1.6. Il ne fonctionnera pas dans jQuery 1.9+.
val()
devrait gérer les deux cas.
$('select').val('1'); // selects "Two"
$('select').val('Two'); // also selects "Two"
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<select>
<option value="0">One</option>
<option value="1">Two</option>
</select>
Je n'ai pas testé cela, mais cela pourrait fonctionner pour vous.
$("select#my-select option")
.each(function() { this.selected = (this.text == myVal); });
Essayez ceci ... pour sélectionner l'option avec le texte myText
$("#my-Select option[text=" + myText +"]").attr("selected","selected");
Je le fais de cette façon (jQuery 1.9.1)
$("#my-select").val("Dutch").change();
Note: n'oubliez pas le changement (), j'ai dû chercher trop longtemps à cause de ça :)
$("#myselect option:contains('YourTextHere')").val();
renverra la valeur de la première option contenant votre description textuelle. Testé cela et fonctionne.
Pour éviter toutes les complications de la version jQuery, je vous recommande vivement d'utiliser l'une de ces fonctions javascript très simples ...
function setSelectByValue(eID,val)
{ //Loop through sequentially//
var ele=document.getElementById(eID);
for(var ii=0; ii<ele.length; ii++)
if(ele.options[ii].value==val) { //Found!
ele.options[ii].selected=true;
return true;
}
return false;
}
function setSelectByText(eID,text)
{ //Loop through sequentially//
var ele=document.getElementById(eID);
for(var ii=0; ii<ele.length; ii++)
if(ele.options[ii].text==text) { //Found!
ele.options[ii].selected=true;
return true;
}
return false;
}
Cette ligne a fonctionné:
$("#myDropDown option:contains(myText)").attr('selected', true);
Je sais que ceci est un ancien message, mais je ne pouvais pas le faire sélectionner par texte à l'aide de jQuery 1.10.3 et des solutions ci-dessus. J'ai fini par utiliser le code suivant (variation de la solution de spoulson):
var textToSelect = "Hello World";
$("#myDropDown option").each(function (a, b) {
if ($(this).html() == textToSelect ) $(this).attr("selected", "selected");
});
J'espère que ça aide quelqu'un.
$("#Test").find("option:contains('two')").each(function(){
if( $(this).text() == 'two' ) {
$(this).attr("selected","selected");
}
});
L'instruction if fait une correspondance exacte avec "deux" et "deux trois" ne seront pas appariés
Le moyen le plus simple avec 1.7+ est:
$("#myDropDown option:text=" + myText +"").attr("selected", "selected");
1.9+
$("#myDropDown option:text=" + myText +"").prop("selected", "selected");
Testé et fonctionne.
jetez un oeil au plugin jquery selectedbox
selectOptions(value[, clear]):
Sélectionnez les options par valeur en utilisant une chaîne comme paramètre $("#myselect2").selectOptions("Value 1");
ou une expression régulière $("#myselect2").selectOptions(/^val/i);
.
Vous pouvez également effacer les options déjà sélectionnées: $("#myselect2").selectOptions("Value 2", true);
Juste sur une note de côté. Ma valeur sélectionnée n'était pas définie. Et j'avais des recherches partout sur le net. En fait, je devais sélectionner une valeur après un rappel d'un service Web, car j'obtenais des données.
$("#SelectMonth option[value=" + DataFromWebService + "]").attr('selected', 'selected');
$("#SelectMonth").selectmenu('refresh', true);
Ainsi, l'actualisation du sélecteur était la seule chose qui me manquait.
Voici un moyen très simple. plz l'utiliser
$("#free").val("y").change();
J'ai trouvé qu'en utilisant attr
on se retrouvait avec plusieurs options sélectionnées quand on ne voulait pas - la solution est d'utiliser prop
:
$("#myDropDown option:text=" + myText +"").prop("selected", "selected");
$('#theYear').on('change', function () {
FY = $(this).find('option:selected').text();
$('#theFolders').each(function () {
$('option:not(:contains(' + FY + '))', this).hide();
});
$('#theFolders').val(0);
});
$('#theYear').on('mousedown', function () {
$('#theFolders option').show().find('option:contains("Select")', this).attr('selected', 'selected');
});
Les exemples ci-dessus me posaient un problème. Le problème était dû au fait que mes valeurs de zone de sélection étaient préremplies avec des chaînes de longueur fixe de 6 caractères, mais que le paramètre en cours de transmission n'était pas de longueur fixe.
J'ai une fonction rpad qui remplit à droite une chaîne, à la longueur spécifiée et avec le caractère spécifié. Donc, après avoir complété le paramètre, cela fonctionne.
$('#wsWorkCenter').val(rpad(wsWorkCenter, 6, ' '));
function rpad(pStr, pLen, pPadStr) {
if (pPadStr == '') {pPadStr == ' '};
while (pStr.length < pLen)
pStr = pStr + pPadStr;
return pStr;
}
Heres une option facile. Il suffit de définir votre option de liste, puis de définir son texte comme valeur sélectionnée:
$("#ddlScheduleFrequency option").selected(text("Select One..."));
Cette réponse acceptée ne semble pas correcte, alors que .val ('newValue') est correct pour la fonction, essayer de récupérer une sélection par son nom ne fonctionne pas pour moi. J'ai dû utiliser l'id et le nom de la classe pour obtenir mon élément.
Obtenez les enfants de la boîte de sélection; boucle à travers eux; lorsque vous avez trouvé celui que vous voulez, définissez-le comme option sélectionnée; renvoie false pour arrêter la boucle.