以编程方式更改由标签值对对象填充的 Dojo Form Select 的选定选项

Posted

技术标签:

【中文标题】以编程方式更改由标签值对对象填充的 Dojo Form Select 的选定选项【英文标题】:Programatically change selected option of a Dojo Form Select that is populated by label value pair object 【发布时间】:2013-04-25 03:06:37 【问题描述】:

我有一个 Dojo 表单选择输入框,我在其中使用具有标签值对的 javascript 数据对象填充选项(下面构建此类对象的示例代码):

for loop 
  varStateValuePairs.push(
    label: <State ID>, 
    value: <State Name>
  );

dijit.byId("StateDDL").addOption(varStateValuePairs);

现在,我想以编程方式在此 Dojo 表单选择中选择特定状态。 我尝试了以下方法:

dijit.byId("StateDDL").attr("value", String(5)); // 5 is the example value corresponding to the label-value pair I want to select
dijit.byId("StateDDL").attr("value", 5);
dojo.byId("StateDDL").value = 5;
dijit.byId("StateDDL").set("displayedValue", "Texas");

以上都不起作用。我哪里错了?我进行了很多搜索,其他帖子中列出的解决方案都不适合我。我正在运行 Dojo 1.8。

【问题讨论】:

【参考方案1】:

使用Select.setValue()

http://jsfiddle.net/fiddlegrimbo/qauHX/2/

默认会选择value0,我们手动选择value2

var varStateValuePairs = [];
for (var i = 0; i < 10; i++) 
  varStateValuePairs.push(
    label: "state"+i, 
    value: "value"+i
  );


require(["dojo/parser", "dijit/registry", "dijit/form/Select", "dojo/domReady!"], function (parser, registry) 
    parser.parse().then(function () 
        var widget = registry.byId("StateDDL");
        widget.addOption(varStateValuePairs);
        widget.setValue("value2");
    );
);

【讨论】:

我看到您的代码在 jsfiddle.net 上运行良好。我在我的内部镜像了相同的代码,但它不起作用。我的所有其他页面都运行良好,Chrome 开发人员工具中没有显示错误。只有这部分不起作用。事实上,我还有其他(静态更新的)dojo 表单选择对象,它们都可以正常工作。 我明白了,除了仔细看看 jsfiddle 和您的代码之间的区别之外,不知道该说什么。 您对“仔细查看 jsfiddle 和您的代码之间的差异”的建议有所帮助。我能找到的唯一区别是我的值最初在数据对象中被分配为整数。我现在在构建数据对象时将其更改为字符串。这解决了问题。因此,结论是 Dojo.form.select 不适用于整数值。我们必须改用字符串。感谢朋友的帮助。 这听起来不错;可以让你盯着屏幕看几个小时的技巧之一!我相信这个小费会派上用场。

以上是关于以编程方式更改由标签值对对象填充的 Dojo Form Select 的选定选项的主要内容,如果未能解决你的问题,请参考以下文章

使用 struts2 dojo 标签填充一个下拉列表以选择其他下拉列表

以编程方式添加标签

向文本框添加标签(以编程方式)

Dojo 1.7 Ajax 内容和 AMD 要求

如何以编程方式打开 Dojo djFilteringSelect 下拉列表

如果以编程方式处理,选择标签不会更新/填充