Javascript 选择嵌套JSON对象并填充下拉列表
我有一些JSON格式如下:Javascript 选择嵌套JSON对象并填充下拉列表,javascript,jquery,json,backbone.js,drop-down-menu,Javascript,Jquery,Json,Backbone.js,Drop Down Menu,我有一些JSON格式如下: "games": [{ "gameType": "RPG", "publishers": [{ "publisher": "Square", "titles": [{ "title": "Final Fantasy", "gameReleases": [ 2006, 2008, 2010, 2012, 2013, 2014 ] }] }] }] 我
"games": [{
"gameType": "RPG",
"publishers": [{
"publisher": "Square",
"titles": [{
"title": "Final Fantasy",
"gameReleases": [ 2006, 2008, 2010, 2012, 2013, 2014 ]
}]
}]
}]
我有一个下拉菜单,允许用户选择游戏类型,并将填充另一个下拉菜单。
因此,如果用户从下拉列表中选择RPG,则发布者下拉列表将显示“Square”,当用户选择Square时,
标题下拉列表将显示“最终幻想”,当选择最终幻想时,日期范围将在相关下拉列表中选择
目前我的游戏类型下拉列表加载良好,问题在于填充后续下拉列表。这是我填充第一个下拉列表的代码:
profileSelected: function () {
var myUrl = "webapp/jsonaccount=" + accountcode;
$.ajax({
url: myUrl,
type: "POST",
dataType: "text",
success: function(data) {
var info = JSON.parse(data); //parse the returned data
var getType = _.pluck(info.games, 'gameType'); //select the game types from the JSON
var prepareType = _.map(getType, function(val){ return '<option>'+val + '</option>';}).join(); //create the to be added to the combobox
$('select#gameTypeCombo').html(prepareType).selectpicker('render'); //render the box
$('select#gameTypeCombo').selectpicker('refresh'); //refresh the box
$('select#gameTypeCombo').on('change', function() { //when gameType is chosen do this
//Populate publisher based on GameType: (select#publisher)
// When publisher is selected populate Titles: (select#gameTypeCombo)
// When titles is selected populate gameReleases: (select#releaseDates)
})
}
})
}
因此,通过添加
[0]
我实际上得到了返回的数据,这是有意义的,但是要开始硬编码,我希望它是可变的,取决于前面的下拉列表 我已经设法解决了你的问题
在适当地填充数据之后,这都是一系列嵌套的.change()
函数调用。如果您需要了解帮助器函数的帮助,我将添加注释。:)
您可以在这里查看:
请原谅格式不好。您可以将JS复制到您最喜欢的文本编辑器中,并验证正在执行的操作。希望有帮助。没有人能提供建议?将JSON数据也传递到map的迭代器函数中。这样,您的内部函数可以处理选择。过一会儿我会试着写一份正式的答复。
$('select#gameTypeCombo').on('change', function() {
var getPublisher = _.pluck(info.games.gameType, 'publisher');
var preparePublisher = _.map(getPublisher, function(val){ return '<option>' + val + '</option>';}).join();
$('select#publisher').html (preparePublisher).selectpicker('render');
})
var getPublisher = _.pluck(info.games[0].gameType, 'publisher');