2013-03-18 101 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); 
}); 

}); }