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:「LAN」、11:「WAN」、12:「セキュリティ」、13:「セキュリティ」、14:「LAN」}

なぜこれが機能しないのですか。

このフィールドにjsonから動的に入力しようとしています。誰か助けてもらえますか?

4

2 に答える 2

0

要素にアクセスするために使用するコードが<select>正しくありません。dijit.byId()ウィジェット オブジェクトを取得するために使用されます。ただし、(その時点では) まだウィジェットを作成していないため、ウィジェットにアクセスすることはできません。使用する必要があるのは、次のコードです。

dojo.byId('dynamic');

これでうまくいかない場合は、ID の要素の HTML コードを追加していただけdynamicないでしょうか。

UPDATE : 以下を使用して、ウィジェット自体にそれらを追加することもできます。

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 に答える