【问题标题】:Dynamically populate select options with nested JSON使用嵌套 JSON 动态填充选择选项
【发布时间】:2014-10-22 20:31:56
【问题描述】:

我想要达到的目标

我有一个静态选择 html 选项,这些选项不会改变,但会决定其他选择框输出的内容。

<select id="firstselectbox">
<option value="first">This is the first</option>
<option value="second">This is the second</option>
<option value="third">This is the third</option>
<option value="fourth">This is the fourth</option>
<option value="fifth">This is the fifth</option>
</select>

目前,我写的代码不想输出以下内容:

选择 1:已选择选项first

选择 2:检查 jSon 文件,找到第一个和所有节点(第二层)并列出它们。当用户选择它时。

选择3:显示第三层

请注意* 是下面选择的选项 - 选择 1 是静态的,选择 2 和 3 是动态的。

Select 1    Select 2    Select 3
first*      London      Famous Famous
second      Jersey      London Famous
third       North*  
fourth      South East  
fifth       South West  
sixth       

到目前为止我做了什么

var datajson = {"first":[{"jesery":[{"id":"jesery","name":"Jesery","jesery":[{"id":"famous","name":"Famous Famous"},{"id":"distance","name":"Distance"}]}],"dontknow":[{"id":"dontknow","name":"Dont Know"}]}],"second":[{"london":[{"id":"london","name":"London","london":[{"id":"f2f","name":"London Famous"},{"id":"famous","name":"Famous Famous"},{"id":"distance","name":"Distance"}]}]}],"third":[{"london":[{"id":"london","name":"London","london":[{"id":"f2f","name":"London Famous"},{"id":"famous","name":"Famous Famous"},{"id":"distance","name":"Distance"}]}],"north":[{"id":"north","name":"North","north":[{"id":"f2f","name":"London Famous"},{"id":"famous","name":"Famous Famous"},{"id":"distance","name":"Distance"}]}]}],"forth":[{"north":[{"id":"north","name":"North","north":[{"id":"f2f","name":"London Famous"},{"id":"famous","name":"Famous Famous"},{"id":"distance","name":"Distance"}]}],"dontknow":[{"id":"dontknow","name":"Dont Know"}]}],"fifth":[{"london":[{"id":"london","name":"London","london":[{"id":"f2f","name":"London Famous"},{"id":"famous","name":"Famous Famous"},{"id":"distance","name":"Distance"}]}],"southeast":[{"id":"southeast","name":"South East","southeast":[{"id":"distance","name":"Distance"}]}]}]}

$("#firstselectbox").on('change', function() {
     $("select#firstselectbox").html('');
        var locations = datajson[$(this).val()];
        var locationString = '';
     $.each(locations, function(i, item) {

        console.log(locations[i]);

         locationString += '<option id="'+ locations[i].id + '" value="' + locations[i].id + '">'  + locations[i].name + '</option>';
     });
    $('#secondselectbox').html(locationString);
});

问题?

下面的代码是locationString += '&lt;option id="'+ locations[i].id + '" value="' + locations[i].id + '"&gt;' + locations[i].name + '&lt;/option&gt;';正在输出unidentified

但是console.log(locations[i]); 正在输出从静态选择框(第一个、第二个等)中选择的数组。但是,试图将其分开似乎失败了。

当前代码正在输出unidentified

【问题讨论】:

  • 你应该先修复你的 json 结构......它似乎很乱
  • @RobertRozas 对我的用例的理想 json 文件有何建议?
  • 你想在第一个选择中基本上选择This is the first,然后用{"id":"famous","name":"Famous Famous"},{"id":"distance","name":"Distance"}填充第二个。这样可以吗??
  • @RobertRozas 是的,但是第三层呢?我将如何将静态元素与第二层联系起来? (如果有道理的话)
  • 当我们到达第三层时,我迷路了……那是什么……我只看到两个(就像我的例子一样)……如果我的例子没问题,我可以用它...告诉我

标签: javascript jquery json


【解决方案1】:

使用不显眼的 JavaScript,这样您就不必寻找这样的错误:

$('#secondselectbox').empty()

$.each(locations, function(i, item) {
  $("<option/>",{id:locations[i].id, value:locations[i].id, text:locations[i].name})
  .appendTo('#secondselectbox')
})

编辑:您的 JSON 结构也存在问题。您基本上有一个包含单个对象的数组,因此当您对数组进行 foreach 时,您的位置比您需要的位置低一级。

【讨论】:

  • 谢谢,但这并不能回答我的问题。您的代码只是向第二个选择框输出一个空追加。
  • 嗨,Bobby,谢谢你 - 你能不能给我一个正确的 JSON 元素的例子 - 这样我就可以指出我哪里出错了。
猜你喜欢
  • 2011-12-26
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多