dijit.form.Select不会以编程方式设置值

时间:2012-06-22 15:17:40

标签: dojo dijit.form

我有一个动态的dojo表单,其中我有一个dijit.form.Select,其选择的值我试图通过各种方式动态设置。我得到了加载和显示数据的选择小部件,但它总是忽略我的每次尝试。我正在使用dojo 1.7。

        var bcntryval = <?= $this->billingContact->countryId;?>;
    var countryStore;



    function onBillingShow() {
        if (countryStore) countryStore.close();
        countryStore = new dojo.data.ItemFileReadStore({url: 'CartUtilities.php?action=getcountries'});
        dijit.byId("bcntry").setStore(countryStore, bcntryval);  // does not set value! but does set the store
        dijit.byId("bcntry").attr('value', String(bcntryval)); // doesn't set the value either
                    dijit.byId("bcntry").set('value', bcntryval));  // nor does this!
    }

我对bcntry小部件的标记如下:

<td><input data-dojo-type="dijit.form.Select" style="width: 10em;" data-dojo-props="sortByLabel:false, maxHeight:'-1'" data-dojo-id="bcntry" id="bcntry" name="bcntry" />

我花了相当多的时间学习道场。当它工作得很好,但文档留下了很多不足之处! 我也看到了dijit.form.FilteringSelect的类似问题。这也忽略了通过javaScript设置值。 我也试过这个代码的完全编程版本。我得出的结论是,当您从商店中选择时,设置值不起作用。 这个DID工作,但它不是动态的。

              <div name="scntry" data-dojo-type="dijit.form.Select" data-dojo-props="maxHeight:'-1',sortByLabel:false" value="<?= $this->shippingContact->countryId;?>" >
              <?php foreach($this->countryList as $c):?>
                 <span value="<?= $c->id;?>"><?= $c->name;?></span>
              <?php endforeach;?>         
              </div>

2 个答案:

答案 0 :(得分:3)

最有可能的原因是,您试图设置'searchAttr'的值。相反,您可能希望将值设置为“标识符”。

答案就在这里,检查底架上的超时功能:http://jsfiddle.net/TTkQV/4/

诀窍是设置值,就像设置option.value(不是option.innerHTML)一样。

normalSelect.set("value", "CA");
filteringSelect.set("value", "AK");

答案 1 :(得分:0)

看看这里,我相信这就是你想要的Dojo方式:

Setting the value (selected option) of a dijit.form.Select widget

如果没有,您可以随时使用实际的dom选择对象并直接使用Javascript:

How do I programatically set the value of a select box element using javascript?