2015-04-08 75 views
0

我需要创建基于下面的json数组下拉列表 下拉列表,如果我选择我需要填充其他四个例如如果我选择印地文第一个下拉列表,然后从multidimentional嵌套json数组创建下拉列表

Second list   Third list   Forth list  Fifth list 
    "History",  "Philosophy", "Political Science" "English" 
    "Sociology",  "BLANK"    "BLANK"   "BLANK" 
    "Economics"        

现在,当我使用jQuery来实现这个列表不填充properly.I不能分解内阵列。 我附加链接jsfidle。我必须更改json格式。

{ 
     "Hindi": [ 
     [ 
      "History", 
      "Sociology", 
      "Economics" 
     ], 
     "Philosophy", 
     "Political Science", 
     "English" 
     ], 
     "Bengali": [ 
     ["History" ,"Sociology" 
     ], 
     "Sanskrit", 
     "Philosophy", 
     "Political Science" 
     ], 
     "English": [["History","Sociology","Economics"], 
     "Philosophy", 
     "Political Science", 
     ["Bengali","Hindi"] 

     ] 

    } 
+0

不应每个主属性具有相同的结构?最后一个是不同的第一个2 – charlietfl

+0

@charlietfl不,我有这种类型的数组 – Xax

+0

所以,如果选择'英语'在第4和第5下拉菜单中会发生什么? – charlietfl

回答

0

当解析JSON假设你有每一个下拉相同的结构:

{"1select":[["2select values..."],[3select values..."],[4select values..."],[5select values..."]]} (如果没有array - >创建一个)

,比做每一个下拉列表相同。

CODE:

var jsonObj = {"Hindi":[["History","Sociology","Economics"],"Philosophy","Political Science","English"],"Bengali":[["History","Sociology"],"Sanskrit","Philosophy","Political Science"],"English":[["History","Sociology","Economics"],"Philosophy","Political Science",["Bengali","Hindi"]]} 

function updateSelect() { 
    var getOpts = function(raw){ 
     var values = raw; 
     if (!(raw instanceof Array)){ 
      values = [raw, ""]; 
     } 
     var result = []; 
     values.forEach(function(obj){ 
      result.push(new Option(obj, obj)); 
     }); 
     return result; 
    }; 


    var newKey = $("#select1").val(); 
    var mappings = [{"#select2":0},{"#select3":1},{"#select4":2},{"#select5":3}]; 
    var selected = jsonObj[newKey]; 

    mappings.forEach(function(mapping){ 
     var selector = Object.keys(mapping)[0]; 
     var index = mapping[selector]; 
     $(selector).empty(); 
     var opts = getOpts(selected[index]); 
     $(selector).append(opts); 
    }); 

} 

$(document).ready(function() { 
    $("#select1").change(updateSelect); 
    updateSelect(); // For initial page load. 
}); 

实施例:here

+0

谢谢,对于实施,我有一个问题,如果有多组这种类型的选择行(例如在一个表中每行是一组5选择下拉列表列表)我如何区分它们。我已经动态生成了它们。 @Eugen Halca – Xax