var data = {
sichuan:[{name:"成都",value:"chengdu"},{name:"眉山",value:"meishan"},{name:"其他",value:"other"}],
hunan:[{name:"长沙",value:"changsha"},{name:"株洲",value:"zhuzhou"},{name:"其他",value:"other"}],
xizang:[{name:"拉萨",value:"lasa"},{name:"山南",value:"shannan"},{name:"其他",value:"other"}]
    }

    var qudata = {
chengdu:[{name:"青羊区",value:"qingyang"},{name:"武候区",value:"wuhou"},{name:"其他",value:"qita"}],
meishan:[{name:"A区",value:"aqu"},{name:"B区",value:"bqu"},{name:"其他",value:"qita"}],
lasa:[{name:"AAA区",value:"aaqu"},{name:"BBB区",value:"bbqu"},{name:"其他",value:"qita"}],
         other:[{name:"其他",value:"qita"}]
    }
    function proChange(obj){
      var v = document.getElementById("city");
      v.options.length = data[obj].length;
      for(var i = 0; i < data[obj].length; i ++){
        v.options[i] = new Option(data[obj][i].name,data[obj][i].value);
     }
   }    function cityChange(obj){
    var v = document.getElementById("qu");
    v.options.length = qudata[obj].length;
    for(var i = 0; i < data[obj].length; i++){
v.options[i] = new Option(data[obj][i].name,data[obj][i].value);
}
   }<select id="province" onchange="proChange(this.value);">
<option value="sichuan">四川</option>
<option value="hunan">湖南</option>
<option value="xizang">西藏</option>
</select>
<select id="city" onchange="cityChange(this.value)">
<option value="">-请选择-</option>
</select>
<select id="qu">
<option value="">-请选择-</option>
</select>

解决方案 »

  1.   

    你写代码乱来。
    改成下面的吧。    function cityChange(obj){
        var v = document.getElementById("qu");
        v.options.length = eval("qudata['"+obj+"'].length");

        for(var i = 0; i < eval("qudata['"+obj+"'].length"); i++){
       v.options[i] = new Option(eval("qudata['"+obj+"'][i].name"),eval("qudata['"+obj+"'][i].value"));
        }
       }
      

  2.   

    把2个 json合成一个json更好吧
    像这样
      

  3.   

    不说你格式问题。data里面有区的项目吗?
    还cityChange  v.options.length = qudata[obj].length; //这没错。qudata
        for(var i = 0; i < data[obj].length; i++){ //到这就变成data???
        v.options[i] = new Option(data[obj][i].name,data[obj][i].value);
        }
      

  4.   

    在JS代码前面引入了JQuery是不是写法会不一样?、单独用,可以正常改变。放在项目里面就不行了;错误提示:data[obj] is undefined
      

  5.   

    http://download.csdn.net/source/2267377
    这里有一个联动的,可以看看
      

  6.   

    我想用js也是一样啊只是代码比较多 <script type="text/javascript">
     var datashi = {
        sichuan:[{name:"成都",value:"chengdu"},{name:"简阳",value:"jianyang"}],
     hunan:[{name:"长沙",value:"changsha"},{name:"株洲",value:"zhuzhou"}]
     }
     var dataqu = {
       chengdu:[{name:"青羊",value:"qingyang"},{name:"武侯",value:"wuhou"}],
       jianyang:[{name:"三岔",value:"sancha"},{name:"董嘉羮",value:"dongjiageng"}],
    changsha:[{name:" 长沙1",value:"changsha1"},{name:" 长沙2",value:"changsha2"}],
    zhuzhou:[{name:" 株洲1",value:"zhuzhou1"},{name:"株洲2",value:"zhuzhou2"}]
     }
     function proChang(o){
       var u =datashi[o].length;
       city.options.length = u;
    for(var i = 0; i < u; i++){
     city.options[i] = new Option(datashi[o][i].name,datashi[o][i].value)
    }
    var t = datashi[o][0].value;
    var r = dataqu[t].length;
    qu.options.length = r;
    for(var y = 0; y < r; y++){
      qu.options[y] = new Option(dataqu[t][y].name,dataqu[t][y].value);
    }
     }
     
     function cityChang(obj){
       var v = dataqu[obj].length;
    qu.options.length = v;
    for(var h = 0;h < v; h++){
      qu.options[h] = new Option(dataqu[obj][h].name,dataqu[obj][h].value);
    }
     }
     
     
    </script>