2008-10-27 7 views
14

Si j'avais la sélection suivante, et ne connaissait pas la valeur à utiliser pour sélectionner un article à l'avance comme dans ce question ou l'index de l'article que je voulais sélectionné, comment pourrais-je sélectionner une des options avec jQuery si je l'ai fait connaître la valeur du texte comme l'option C?Comment sélectionner un élément par sa valeur de texte dans une liste déroulante utilisant jQuery?

<select id='list'> 
<option value='45'>Option A</option> 
<option value='23'>Option B</option> 
<option value='17'>Option C</option> 
</select> 
+0

heh - moi/pensé/cela semblait familier! – nickf

Répondre

14
var option; 
$('#list option').each(function() { 
    if($(this).text() == 'Option C') { 
     option = this; 
     return false; 
    } 
}); 
+1

Il s'agit d'une question novice, j'en suis sûr, mais qu'est-ce que l'option setting = this; faire dans le code ci-dessus? –

+1

@Carvell, 'option' est instancié sur la ligne 1, dans la portée externe, mais sa valeur est' undefined'. En définissant 'option' sur la ligne 4,' option' dans la portée externe est maintenant l'élément DOM dont la valeur de texte est '' Option C ''. Après la boucle '.each', dans la portée externe,' option' peut alors être utilisé pour faire référence à cet élément particulier. – eyelidlessness

+0

Ah d'accord. Ça a du sens. Je pensais que c'était supposé faire quelque chose dans chaque fonction qui me manquait. Réglage pour l'utilisation de la portée externe Je comprends :) Merci. –

14

Cela devrait faire l'affaire:

// option text to search for 
var optText = "Option B"; 
// find option value that corresponds 
var optVal = $("#list option:contains('"+optText+"')").attr('value'); 
// select the option value 
$("#list").val(optVal) 

Comme eyelidlessness souligne, cela se comporter de façon imprévisible lorsque le texte recherchée se trouve dans plus d'une option.

+1

Le problème avec cela est qu'il serait également correspondre à une option avec le texte "Non Option B" ou "Option B12" (évidemment en dehors de la portée de l'exemple, mais l'exemple est évidemment artificiel). – eyelidlessness

+3

Vous pouvez utiliser l'option [text = "optText"] au lieu de contient si vous voulez une correspondance exacte plutôt que "quelque part dans une chaîne". –

+0

@ Scott J'ai du mal à faire fonctionner ça depuis la mise à niveau vers jQuery 1.6.1 (et 1.6.2). Voir mon commentaire dans la réponse de Pavel ci-dessous. –

4
function SelectItemInDropDownList(itemToFind){  
     var option; 
     $('#list option').each(function(){ 
      if($(this).text() == itemToFind) { 
       option = this; 
       option.selected = true; 
       return false;  
       } 
      }); } 

J'ai seulement modifié le code précédent car il ne localisait que l'option dans la liste de sélection, certains peuvent vouloir une démonstration littérale.

9
$("#list option").each(function() { 
    this.selected = $(this).text() == "Option C"; 
}); 
+0

Je me suis battu avec cela tout l'après-midi. J'avais un code qui fonctionnait avant jQuery 1.6.1, par ex. $ (this) .find ('option [text = "sometext"]) .val(); où $ (this) est un élément select, mais pour une raison quelconque, ce code renvoyait simplement undefined. J'ai utilisé votre réponse @Pavel, ce qui est sympa et concis à mon avis, et a permis à mon code de fonctionner à nouveau. Merci! J'aimerai toujours savoir pourquoi l'ancien code a cessé de fonctionner ...? –

Questions connexes