2013-03-18 47 views
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動態填充DojoX中CheckedMultiselect

對象這個數據{1: 「QOS」,2: 「ATM」,3: 「軟件」,4: 「其他」,5 :「IPv6」6: 「管理」7:「LAN」8:「LAN」9:「QOS」10:「LAN」11:「WAN」12: 「安全」 :「安全」,14:「LAN」}

爲什麼不能正常工作。

我想從json動態地填充這個字段。有人可以幫忙嗎?

回答

0

您用於訪問您的<select>元素的代碼不正確。 dijit.byId()用於獲取小部件對象。但是由於您尚未創建小部件(當時),因此無法訪問它。 你應該用的是下面的代碼:

dojo.byId('dynamic'); 

如果這不起作用,請您與ID dynamic添加的元素的HTML代碼?

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作爲概念證明。

+0

嗨,我試過dojo.byId('動態')。但它仍然不起作用。 – user1999099 2013-03-20 06:12:05

+0

這是我用過的HTML。 user1999099 2013-03-20 06:14:42

+0

@ user1999099我更新了我的答案,現在應該可以工作(在JSFiddle上測試了它)。 – g00glen00b 2013-03-20 10:54:49

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

}); }