2010-02-07 5 views
14

J'ai un widget dijit.form.Select. C'est lié à un magasin de données, si c'est important. Il est déjà rempli de plusieurs options. Tout ce que je veux faire est de définir par programme sa valeur. Je peux obtenir sa valeur en utilisant myWidget.attr('value') mais si j'essaie de faire myWidget.attr('value', 5) par exemple (où 5 est l'une des valeurs valides), tout ce qu'il fait est de réinitialiser le widget pour sélectionner la toute première option, peu importe la valeur que je lui donne.Définition de la valeur (option sélectionnée) d'un widget dijit.form.Select

Cela semble être un bug, et il n'y a pas de tests ou de documentation qui montrent comment accomplir ce que je veux. Mais y a-t-il un moyen, même si c'est un hack sale? J'utilise Dojo 1.4.0. Notez que dijit.form.Select est le nouveau nom de dojox.form.DropDownSelect.

edit: J'ai même essayé de réinitialiser le widget avec toutes les nouvelles options, mais il ignore l'option qui a selected = true et sélectionne simplement la première option. Il doit toujours y avoir un moyen cependant.

+0

Il y a une page de test ici: http://bit.ly/9qitSk avec laquelle vous pouvez jouer. En utilisant fire-bug, j'ai utilisé dijit.byId ('s9'). Attr ('value', 'CO') avec succès sur cette page. Cela définira le "magasin" Sélectionner sur cette page. – jbarz

+0

@Joe B Génial merci - Je l'avais vu auparavant, mais je n'ai pas vu d'exemple de réglage de valeur. J'avais essayé de le faire dans firebug avec mon propre widget Select, qui ne fonctionnait pas, donc je me demande ce qui est différent ... – aehlke

+0

BTW postez cela comme une réponse et je vais vous upvote. – aehlke

Répondre

15

Même si vos valeurs sont ints, si vous définissez votre entier sur une chaîne, cela fonctionnera.

dijit.byId('my_select').attr('value', String(5)); 
+0

Existe-t-il un moyen de faire cela par programme? – streetlight

+0

Veuillez noter qu'à partir de Dojo 2.0 attr() ne fonctionnera plus. – algiogia

11

Il s'avère que c'est un bug - si les valeurs de l'option ne sont pas des chaînes, cela ne fonctionnera pas (les miennes étaient des entiers).

+3

C'est en fait un effet secondaire de la façon dont les tableaux/hachages fonctionnent dans js, je pense. Si vous utilisez un int, il pensera que vous indexez le tableau, au lieu de l'utiliser comme un hachage. – aehlke

2

Repost de mon commentaire: Il ya une page de test ici: dojo archive avec laquelle vous pouvez jouer. En utilisant fire-bug, j'ai utilisé dijit.byId ('s9'). Attr ('value', 'CO') avec succès sur cette page. Cela définira le "magasin" Sélectionner sur cette page. Mais comme vous l'avez dit, je l'ai mis en utilisant une chaîne et vous utilisiez des entiers, donc je n'ai pas vu le bogue. Bonne prise.

+0

Je vois exactement le même problème (mais en essayant de cliquer sur un élément dans la liste déroulante). Ici, j'utilise Dojo 1.7.3 et certainement en utilisant Stringrs! :/ –

Questions connexes