0
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);

 });
}

我在 optionsData 中有这些数据

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

为什么这不起作用。

我正在尝试从 json 动态填充此字段。有人可以帮忙吗?

4

2 回答 2

0

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

dojo.byId('dynamic');

如果这不起作用,您能否添加带有 ID 的元素的 HTML 代码dynamic

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

myCheckedMultiSelect.addOption(c);

这意味着您必须在小部件声明之后放置 for 循环,如下所示:

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);
     }

 });
}

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

于 2013-03-18T15:12:20.873 回答
0

你应该像这样使用 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);

 myCheckedMultiSelect.startup();

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

}); }

于 2014-08-22T16:47:32.713 回答