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

Posted

技术标签:

【中文标题】dijit.form.Select 不会以编程方式设置值【英文标题】:dijit.form.Select won't set value programmatically 【发布时间】:2012-06-22 15:17:40 【问题描述】:

我有一个动态 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 设置值。 我还尝试过此代码的完全编程版本。我得出的结论是,当您从商店中选择时,设置该值不起作用。 这确实有效,但不是动态的。

              <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>

【问题讨论】:

【参考方案1】:

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

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

诀窍是像设置 option.value(而不是 option.innerhtml)一样设置值。

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

【讨论】:

【参考方案2】:

看看这里,我相信这会以 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?

【讨论】:

以上是关于dijit.form.Select 不会以编程方式设置值的主要内容,如果未能解决你的问题,请参考以下文章

如何添加 optgroup do dijit.form.Select 或其他小部件类型

如何使 dijit.form.Select 与具有相同值的多个项目一起使用?

用dstore / Memory存储器存储来填充dijit / form / select

Dojo dijit.form.select:创建新的选择小部件后,旧小部件的选定值无法更改

更改从商店加载选项的下拉 dojo 的字体大小

Dojo:如何设置禁用新按钮