带有Json数据的下拉框

时间:2014-02-25 07:29:33

标签: javascript jquery html json drop-down-menu

我正在尝试使用jquery使用以下JSON数据填充下拉框

    {
     "Name":["A","B","C"],
     "Movie":["X","Y","Z"]
    }

这是我到目前为止所做的脚本

   $("#firstbox").change(function(){
    var $selection=$(this);

   $.getJSON("data.json",function(data){
    var i=$selection.val();
    var arr=[];

    switch(i){
        case 'Name':
            arr=data.Name.split(",");
            break;
        case 'Movie':
            arr=data.Movie.split(",");
            break;
    }       

    });

    });

我的基本index.html就像这样

   <select id="firstbox">
            <option selected value="">---Select---</option> 
            <option value="Name">Name</option>
            <option value="Movie">Movie</option>
   </select>

   <select id="secondbox" name="">
            <option selected value="">---Generate---</option>
            <script src="myjs.js"> </script>
   </select>

'secondbox'下拉列表应生成与'firstbox'下拉列表相对应的值。我收到的错误是'未定义的拆分功能'。谁能给我一个提示?

由于

2 个答案:

答案 0 :(得分:1)

splitString对象的一种方法,您可以在Array对象上使用它。 您不需要拆分,因为Name和Movie键是JSON对象中的allready数组。

$("#firstbox").on("change", function(e){
    var sel=$(this).val(); 
    $("#secondbox").empty();
    $.getJSON("data.json",function(data){
        var values=data[sel] || ['Error : key not found'];
        $(values).each(function(index,element) {
             $("<option />", {value: element, text:element}).appendTo("#secondbox"); 
         });
    });
 });

以下是一个有效的例子:http://jsfiddle.net/cKBeE/

答案 1 :(得分:1)

$("#firstbox").on("change", function(e){
 writeOptions();
}

function getJSONData(firstboxval) {
  //make ajax call to get data for second dropdown 
  //that corresponds to the value selected in firstbox 
  //then make function return the array of options
}

function writeOptions() {   
   var firstboxval = $("#firstbox").val();
   var optionValues = getJSONData(firstboxval);
   var dropDown = document.getElementById("secondbox");

   for(var i=0; i<optionValues.length; i++) {
       var key = i;
       var value = optionValues[i];
       dropDown.options[i] = new Option(value, key);
    }
}