2010-12-14 4 views
18

Après avoir changé un menu d'un menu de sélection normal à un menu de sélection jQuery, je ne peux plus y sélectionner les options par programme. Y a-t-il un moyen de faire cela?Comment sélectionner dynamiquement une option dans un menu select jQuery ui?

Le code pour sélectionner est (en supposant ListId est l'identifiant réel de la liste)

$('#ListId').val(value); 

Le plugin est activited comme ceci:

$("#ListId").selectmenu({ style: "dropdown", width:140 }); 

est-il un moyen de sélectionner un élément dans le menu de sélection? Appeler la même fonction .val (value) sélectionne simplement la valeur dans la liste de sélection de l'original caché, pas le menu de sélection jQuery joliment stylé.

+0

Cette réponse a fonctionné pour moi http://stackoverflow.com/ a/26501171/119741 – Nick

Répondre

23
$('#ListId').selectmenu("value", value); 
+4

http://stackoverflow.com/questions/14970729/uncaught-error-no-such-method-value-for-selectmenu-widget-instance – dtrunk

+29

Ne fonctionne pas pour le n ew versions de jQuery UI, essayez ceci à la place $ ('# listId'). val (valeur) .selectmenu ('refresh') –

+0

@TheodoreK. en utilisant '$ ('# listId'). val (value) .selectmenu ('refresh')' throws 'Erreur non interceptée: aucune méthode 'instance' pour l'instance du widget menu'. Toute solution à cela? J'ai initialisé ma liste comme '$ (" # listId "). Selectmenu();' et les options sont remplies dynamiquement en utilisant la boucle –

2

Vous pouvez en outre déclencher le gestionnaire d'événements de changement en ajoutant un appel de changement:

$('#ListId').selectmenu("value", value); 
$('#ListId').selectmenu("change"); // Add this for a change event to occur 
+0

Vous pouvez avoir des effets secondaires en forçant un appel de changement lorsque vous avez seulement besoin de réinitialiser votre menu. –

1

S'il vous plaît noter que vous devez utiliser index (non valeurs) pour sélectionner l'option en utilisant cette méthode.

Par exemple, sélectionnez cette option.

<select id="ListId"> 
    <option value="value-one">One</option> 
    <option value="value-two">Two</option> 
</select> 

Dans ce cas, l'expression $('#ListId').selectmenu("value", "value-two"); ne retourné aucun résultat. Au lieu de cela, nous devons utiliser $('#ListId').selectmenu("value", "2");. En d'autres termes, nous devons utiliser la position/index de l'élément à l'intérieur du select. Pas la valeur!

Trouver l'index est facile cependant. Vous pouvez utiliser la ligne suivante pour l'atteindre.

var index = $('#ListID option[value="value-two"]').index(); 
$('#ListId').selectmenu("value", index); 
+1

Cela ne fonctionne pas pour moi ... En regardant plus loin, j'ai trouvé '$ ('# select'). Prop (" selectedIndex ", 0) .selectmenu ('refresh');' sur http://underprise.com/quick-tip-setting-l'index-de-a-select-field-with-jquery / – sbru

16

En supposant que vous avez déjà fait cette partie une fois avant:

$("#ListId").selectmenu({ style: "dropdown", width:140 }); 

Je trouve cela fonctionne:

$('#ListId').val(value); 
$('#ListId').selectmenu("refresh"); 

Cela provoque la la chute stylisée vers le bas pour afficher la valeur correcte.

0

J'ai essayé ce qui suit, et il ne fonctionne pas dans ma situation

1.

$('#ListId').val(value); 
$('#ListId').selectmenu("refresh"); 

2.

$('#ListId').selectmenu("value", value); 

3.

var option = $("#ListID option") 
option.attr("selected", true); 
// option.prop("selected", true); 
// option.attr("selected", "selected"); 
// option.prop("selected", "selected"); 
$('#ListId').selectmenu("refresh"); 

Actualiser , sélectionné .... etc. et dans certains cas, cela ne fonctionne pas.

Par conséquent, je presse ctrl +Je en chrome pour voir le code source. et j'utilise le code suivant pour résoudre ma situation.

// Set Component Separator jQuery UI SelectMenu 
componentSeparatorPlaceHolder.find(".ui-selectmenu-text").html(inputComponentSeparatorStr); 
// Set ComponentSeparatorDropDown 
componentSeparator.val(inputComponentSeparatorStr); 
0

J'ai essayé les façons suivantes, et il fonctionne dans ma situation

$('#ListId').find('option[value=""]').attr("selected", true);  

OU

$('#ListId').prop('selectedIndex', 0); 
Questions connexes