【问题标题】:populate select element based on json基于 json 填充选择元素
【发布时间】:2012-10-30 22:41:06
【问题描述】:

如何填充第二个选择元素?我已经弄清楚如何做第一个。但是,根据选择的“Make”,我怎么能对第二个做同样的事情呢?我试着在迈出一小步的同时说服自己完成它,但我认为这对我来说可能太先进了。

var cars = '{"USED":[{"name":"Acura","value":"20001","models":[{"name":"CL","value":"20773"},{"name":"ILX","value":"47843"},{"name":"ILX Hybrid","value":"48964"},{"name":"Integra","value":"21266"},{"name":"Legend","value":"21380"},{"name":"MDX","value":"21422"},{"name":"NSX","value":"21685"},{"name":"RDX","value":"21831"},{"name":"RL","value":"21782"},{"name":"RSX","value":"21784"},{"name":"SLX","value":"21879"},{"name":"TL","value":"22237"},{"name":"TSX","value":"22248"},{"name":"Vigor","value":"22362"},{"name":"ZDX","value":"32888"}]},{"name":"Alfa Romeo","value":"20047","models":[{"name":"164","value":"20325"},{"name":"8c Competizione","value":"34963"},{"name":"Spider","value":"22172"}]}';
var carobj = eval ("(" + cars + ")");
var select = document.getElementsByTagName('select')[0];

//print array elements out
for (var i = 0; i < carobj.USED.length; i++) {
    var d = carobj.USED[i];
    select.options.add(new Option(d.name, i))
};

【问题讨论】:

  • 您想要填充具有指定值的第二个选项还是具有相应值的所有选项?
  • 很抱歉我没有看到这个回复。我希望填充该特定品牌的所有值。

标签: javascript json select


【解决方案1】:

如果我没看错你的问题,你想用第一个选择中的品牌模型填充第二个选择。请参阅下面的纯 JS 方法(使用 jsfiddle)。如果可能的话,我会建议研究 jQuery,因为我更喜欢 jQuery 解决方案。

http://jsfiddle.net/m5U8r/1/

var carobj;

window.onload = function () {
    var cars = '{"USED":[{"name":"Acura","value":"20001","models":[{"name":"CL","value":"20773"},{"name":"ILX","value":"47843"},{"name":"ILX Hybrid","value":"48964"},{"name":"Integra","value":"21266"},{"name":"Legend","value":"21380"},{"name":"MDX","value":"21422"},{"name":"NSX","value":"21685"},{"name":"RDX","value":"21831"},{"name":"RL","value":"21782"},{"name":"RSX","value":"21784"},{"name":"SLX","value":"21879"},{"name":"TL","value":"22237"},{"name":"TSX","value":"22248"},{"name":"Vigor","value":"22362"},{"name":"ZDX","value":"32888"}]},{"name":"Alfa Romeo","value":"20047","models":[{"name":"164","value":"20325"},{"name":"8c Competizione","value":"34963"},    {"name":"Spider","value":"22172"}]}]}';

    carobj = eval ("(" + cars + ")");
    var makes = document.getElementById('make');

    for (var i = 0; i < carobj.USED.length; i++) {
        var d = carobj.USED[i];
        makes.options.add(new Option(d.name, i));
    }

    makes.onchange = getModels;
    getModels();
}

// add models based on make
function getModels () {
    var makes = document.getElementById('make');
    var make = makes.options[makes.selectedIndex].text;
    for (var i = 0; i < carobj.USED.length; i++) {
        if (carobj.USED[i].name == make) {
            var models = document.getElementById('model');
            models.options.length = 0;
            for (var j= 0; j < carobj.USED[i].models.length; j++) {
                var model = carobj.USED[i].models[j];                
                models.options.add(new Option(model.name, j));
            }
            break;            
        }
    }
}

我还建议研究更安全的 JSON 解析。如果它在任何用户输入上运行,则使用 eval 存在安全风险。您可以查看JSON.org 和他们的json2.js。或者,如果您想使用 jQuery:parseJSON。下面是 jQuery 版本:

jQuery.parseJSON(jsonString);

JSON 解析提示来自:Safely turning a JSON string into an object

【讨论】:

  • 感谢您的回答,这就是我想要的。 jQuery 解决方案有何不同?
  • @Kelbizzle - 很高兴听到。老实说,jQuery 不是必需的,只是我通常默认使用它。在我看来,它可以更快地编写与​​ DOM 交互的代码。我会考虑的主要更新(jQuery 与否)是更安全的 JSON 解析。我用一些信息更新了我的答案。
  • 感谢您的提示。当材料没有使用最佳实践时,自学就很困难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多