2012-12-19 15 views
9

Mam ciąg JSON (z php json_encode), który wygląda jak;Tworzenie html select z optgroup z json

var json = [{"Foo":[{"id":1,"name":"aaa"},{"id":2,"name":"bbb"}]},{"Bar":[{"id":3,"name":"ccc"},{"id":4,"name":"ddd"}]}]; 

Chcę mieć możliwość wyboru html za pomocą Javascript/jQuery w formularzu;

<select> 
    <optgroup label="Foo"> 
     <option value="1">aaa</option> 
     <option value="2">bbb</option> 
    </optgroup> 
    <optgroup label="Bar"> 
     <option value="3">ccc</option> 
     <option value="4">ddd</option> 
    </optgroup> 
</select> 

chodzi o przetwarzanie JSON mam this far (daleko nie wiem), ale jsFiddle zawiedzie go uruchomić i zawiesza przeglądarkę.

var json = [{"Foo":[{"id":1,"name":"aaa"},{"id":2,"name":"bbb"}]},{"Bar":[{"id":3,"name":"ccc"},{"id":4,"name":"ddd"}]}]; 

$.each(json, function(i,group) { 
    console.log(i); 
    $.each(group, function(j, option) { 
        console.log(j, option); 
        $.each(option, function(k, item) { 
            console.log(k, item); 
        }); 
    }); 
});​ 
+5

Ustaw skrzypce użyć jQuery zamiast MooTools, i wydaje się działać dobrze http://jsfiddle.net/DVKMK/1/ –

+0

Próbuje dynamicznie utworzyć jego JS nie Zrób to. – webnoob

Odpowiedz

7

To powinno działać dobrze.

var $select = $("<select>"); 
$select.appendTo("#somewhere"); 

$.each(json, function(i, optgroups) { 
    $.each(optgroups, function(groupName, options) { 
     var $optgroup = $("<optgroup>", {label: groupName}); 
     $optgroup.appendTo($select); 

     $.each(options, function(j, option) { 
      var $option = $("<option>", {text: option.name, value: option.id}); 
      $option.appendTo($optgroup); 
     }); 
    }); 
}); 
+0

Chcesz 'var $ select = $ ("