Javascript 动态填充Dojox CheckedMultiselect

Javascript 动态填充Dojox CheckedMultiselect,javascript,dojo,Javascript,Dojo,我在选项数据中有此数据 对象{1:“QOS”,2:“ATM”,3:“软件”,4:“其他”,5:“IPv6”,6: “管理”,7:LAN,8:LAN,9:QOS,10:LAN,11:WAN,12: “安全”,13:“安全”,14:“局域网”} 为什么这不起作用 我试图从json动态填充此字段。有人能帮忙吗?您用来访问元素的代码不正确dijit.byId()用于获取小部件对象。但由于您尚未创建小部件(当时),因此无法访问它。 您应该使用以下代码: function populateMultiSel

我在选项数据中有此数据

对象{1:“QOS”,2:“ATM”,3:“软件”,4:“其他”,5:“IPv6”,6: “管理”,7:LAN,8:LAN,9:QOS,10:LAN,11:WAN,12: “安全”,13:“安全”,14:“局域网”}

为什么这不起作用


我试图从json动态填充此字段。有人能帮忙吗?

您用来访问
元素的代码不正确
dijit.byId()
用于获取小部件对象。但由于您尚未创建小部件(当时),因此无法访问它。 您应该使用以下代码:

function populateMultiSelect(optionData){
    require([
      "dojox/form/CheckedMultiSelect",
      "dojo/dom", "dojo/_base/window", "dojo/domReady!"
    ], function(CheckedMultiSelect, dom, win){

     var sel = dijit.byId('dynamic');

     var n = 0;
     for(var i in optionData){
         var c = win.doc.createElement('option');
         c.innerHTML = optionData[i];
         c.value = optionData[i];
         console.log(optionData[i]);
         sel.appendChild(c);
     }

     var myCheckedMultiSelect = new CheckedMultiSelect({
       name: 'dynamic',
       multiple: 'true'
       }, sel);

 });
}
如果这不起作用,请添加ID为
dynamic
的元素的HTML代码好吗

更新:您还可以尝试使用以下命令将它们添加到小部件本身:

dojo.byId('dynamic');
这意味着您必须在小部件声明之后放置for循环,如下所示:

myCheckedMultiSelect.addOption(c);

我还制作了一个数组作为概念证明。

您应该使用array.forEach,如下所示

function populateMultiSelect(optionData){
    require([
      "dojox/form/CheckedMultiSelect",
      "dojo/dom", "dojo/_base/window", "dojo/domReady!"
    ], function(CheckedMultiSelect, dom, win){

     var sel = dojo.byId('dynamic');

     var n = 0;

     var myCheckedMultiSelect = new CheckedMultiSelect({
       name: 'dynamic',
       multiple: 'true'
       }, sel);

     for(var i in optionData){
         var c = win.doc.createElement('option');
         c.innerHTML = optionData[i];
         c.value = optionData[i];
         console.log(optionData[i]);
         myCheckedMultiSelect.addOption(c);
     }

 });
}
}));
}

这是我使用的HTML@user1999099我更新了我的答案,现在应该可以了(在JSFIDLE上进行了测试)。
function populateMultiSelect(optionData){
require([
  "dojox/form/CheckedMultiSelect",
  "dojo/dom", "dojo/_base/window", "dojo/domReady!"
], function(CheckedMultiSelect, dom, win){

 var sel = dojo.byId('dynamic');

 var n = 0;

 var myCheckedMultiSelect = new CheckedMultiSelect({
   name: 'dynamic',
   multiple: 'true'
   }, sel);

 myCheckedMultiSelect.startup();

 array.forEach(optionData, function(optionData) {
     myCheckedMultiSelect._addOptionItem(optionData);
 });