小白前端進階模組1————國省市縣聯動

鍾離上河發表於2019-01-29

1.分析任務

使用AJAX讀取JSON檔案資料,利用迴圈及條件語句將所需要的資料分別儲存在各個陣列中,結合change事件即可達到所需功能

2.優缺點分析

優點:不僅在實現其基本功能,還可在json檔案中更改index的屬性值,更改下拉選單中的順序。

缺點:越到低層,巢狀越嚴重,但無法避免(自認為)

3.程式碼展示

linkage.html  檔案:

 1 <html>
 2 <head>
 3     <meta charset="UTF-8">
 4     <link rel="stylesheet" href="css/linkage.css">
 5     <script src="jquery/jquery-1.7.1.js"></script>
 6     <script src="js/link.js"></script>
 7 </head>
 8 <body>
 9 <div><select class="one"><option id="q1">請選擇國家</option></select></div>
10 <div><select class="two"></select></div>
11 <div><select class="three"></select></div>
12 <div><select class="four">></select></div>
13 </body>
14 </html>

link.js檔案展示:

$(document).ready(function () {
$.ajax({
   url:`data/linkage.json`,
    type:"post",
    dataType:"json",
    success:function(data){
       /*國家*/
        var arr1 = [];
        $.each(data.nation,function (i,e) {
            arr1[e.index]=e.name;
        });
        $.each(arr1,function () {
            if(this!=null){
                $(".one").append("<option>" + this+ "</option>");
            }
        });
        /*省份*/
        var arr2 = [];
       $(".one").change(function() {
            var one_text=$(".one option:selected").text();
            $(".two").empty();
            $(".three").empty();
            $(".four").empty();
            $(".two").append("<option>" + "請選擇省份"+ "</option>");
          $.each(data.nation,function (i,e) {
              if(e.name==one_text){
              $.each(e.province,function (j,h) {
                  console.log(h.name);
                      arr2[h.index]=h.name;
              })
              }
          })
          $.each(arr2,function () {
              if(this!=null){
                  $(".two").append("<option>" + this+ "</option>");
              }
          })
          console.log(arr2);
      });
         /**/
          var  arr3=[];
        $(".two").change(function() {
            var one_text=$(".one option:selected").text();
            var two_text=$(".two option:selected").text();
            $(".three").empty();
            $(".four").empty();
            $(".three").append("<option>" + "請選擇市"+ "</option>");



            $.each(data.nation,function (i,e) {
                if(e.name==one_text){
                    $.each(e.province,function (j,h) {
                        if(h.name==two_text) {
                            $.each(h.city,function (k,r) {
                                console.log(r.name);
                                arr3[r.index]=r.name;
                            })
                        }

                    })
                }
            })
            $.each(arr3,function () {
                if(this!=null){
                    $(".three").append("<option>" + this+ "</option>");
                }
            })





        });
        /**/
        var arr4=[];
        $(".three").change(function() {
            var one_text=$(".one option:selected").text();
            var two_text=$(".two option:selected").text();
            var three_text=$(".three option:selected").text();
            $(".four").empty();
           $(".four").append("<option>" + "請選擇縣"+ "</option>");
                $.each(data.nation,function (i,e) {
                    if(e.name==one_text){
                        $.each(e.province,function (j,h) {
                            if(h.name==two_text) {
                                $.each(h.city,function (k,r) {
                                    if(r.name==three_text) {
                                        $.each(r.county,function (l,g) {
                                            arr4[g.index]=g.name;
                                        })
                                    }
                                })
                            }
                        })
                    }
                })
                $.each(arr4,function () {
                    if(this!=null){
                        $(".four").append("<option>" + this+ "</option>");
                    }
        });


        // wer();

 /*       function wer() {

            for (var num = 0; num < data.nation.length; num++) {
                $(".one").append("<option>" + data.nation[num].name + "</option>");
            }
        }*/

        // function wer() {
        //     $.each(data,function(i,val){
        //
        //
        //         $(".one").append("<option>" + onelink.nation[index].name + "</option>");
        //     })
        // }

    });


    },
    error:function(){
        alert(0)
    }
})
})

linkage.json檔案部分展示:


{
"nation": [
{
"name": "中國",
"index":1,
"province": [
{
"name": "河南省",
"index":0,
"city": [
{
"name": "鄭州市",
"index":0,
"county": [
{
"name": "鄭一縣",
"index":0
},
{
"name": "鄭二縣",
"index":1
}
]
},

4.實際操作中所遇到的問題:

在取json的值時取不到,以為是沒有轉換為json物件取不到值,後面循序去取陣列物件的值,才把值取到。

 5.知識瞭解:JSON物件和JSON字串的轉換

json是以字串的形式進行傳遞,而json操作的是json物件。

json字串:var str=`{“name” : ” Alica” ,”age” : ” 12″}`;

json物件:var obj={“name” : ” Alica” ,”age” : ” 12″};

String轉換為json物件: var obj=eval(`(`+str+`)`);

json物件轉換為String:var str=obj.toJSONString();

6.知識瞭解: jQuery遍歷json物件

grep:

each:

1   $.each(arr, function(i, item){      
2   
3   });  

其中arr代表的是一個陣列物件,i 代表陣列下標,item代表陣列下標取到的內容

inArray:

var anArray = [`one`,`two`,`three`];
var index = $.inArray(`two`,anArray);
alert(index);//返回該值在陣列中的鍵值,返回1
alert(anArray[index]);//彈出 two

可根據inArray根據內容獲取內容所對應的鍵值

map:

 

 

相關文章