1. 程式人生 > >Jquery實現的省市區三級聯動

Jquery實現的省市區三級聯動

之前用javascript寫了個三級聯動,程式碼量較多,不夠優雅簡潔,這裡介紹一種jquery的寫法,大家可以做個比較。

還是先看效果吧。

頁面初始化載入效果

選擇省市之後

下面是程式碼:

<body>
省份:<select id="province" ></select>
城市:<select id="city"></select>
區/縣<select id="area"></select>


<script type="text/javascript">

var provinceArr=["四川","重慶","雲南"
]; var cityArr=[["成都","達州","綿陽"], ["萬州","沙坪壩"], ["昆明","大理","麗江"]]; var areaArr=[[["錦江區","青羊區","金牛區","高新區"],["達縣","渠縣"],["綿陽市","南山"]], [["五橋","百安"],["西永","西科"]], [["昆明市","花城"],["洱海","蒼山","下關"],["幕府","玉龍縣"]]]; $().ready(function(){ //初始化省份 for
(var i=0;i<provinceArr.length;i++){ $("#province").append("<option value='"+(i+1)+"'>"+provinceArr[i]+"</option>"); } //初始化城市 $("#city").append("<option value='0'>請選擇城市</option>"); for(var i=0;i<cityArr[0].length;i++){ $("#city"
).append("<option value='"+(i+1)+"'>"+cityArr[0][i]+"</option>"); } //初始化區域 $("#area").append("<option value='0' >請選擇區域 </option>"); for(var i=0;i<cityArr[0][0].length;i++){ $("#area").append("<option value='"+(i+1)+"'>"+areaArr[0][0][i]+"</option>"); } //下面進行province的change事件切換設定 $("#province").change(function(){ //先清除城市 和區域裡下拉列表裡的所有 $("#city").empty(); $("#area").empty(); //新增一個下標為0,value為0的potion,文字為請選擇城市,在省份的下拉列表被選中時候顯示 $("#city").append("<option value='0'>請選擇城市</option>"); //設定所選擇的option的當前下標,對應的cityArr裡的下標,並賦值 var proValue=$(this).val(); var curCity=cityArr[proValue-1]; for(var i=0;i<curCity.length;i++){ $("#city").append("<option value='"+(i+1)+"'>"+curCity[i]+"</option>"); } }); //下面進行city的change事件切換設定 $("#city").change(function(){ //先清除區域裡下拉列表裡的所有 $("#area").empty(); //新增一個下標為0,value為0的option,文字為請選擇區域,在城市的下拉列表被選中時候顯示 $("#area").append("<option value='0' >請選擇區域 </option>"); //獲取此時province和city所對應的下標 var proValue=$("#province").val(); var cityValue=$(this).val(); var curArea=areaArr[proValue-1][cityValue-1]; for(var i=0;i<curArea.length;i++){ $("#area").append("<option value='"+(i+1)+"'>"+curArea[i]+"</option>"); } }); });
</script> </body>

這裡的原理是利用 .append()方法向select選框下追加子節點,不需要判斷父節點是否被選中,也不需要重複的用巢狀for()來追加元素內容,從而達到精簡程式碼,減少邏輯呼叫的作用。

這邊文章到這裡其實已經可以結束了,但如果我們要自定義預設選中的城市呢。這個也簡單。
我們用三個變數來儲存我們的初始選擇:

var p=2;
var c=1;
var a=2;

注意,在這裡進行第一次省(p)的判斷:

for(var i=0;i<provinceArr.length;i++){
           /* 這裡進行了一個判斷,如果i的值與傳入的value值相等,則選中value值相等的那一項 */
           if(p==i+1){ 
               $("#province").append("<option value='"+(i+1)+"' selected='selected'>"+provinceArr[i]+"</option>");
           }else{
               $("#province").append("<option value='"+(i+1)+"'>"+provinceArr[i]+"</option>");   
           }
       }

同理,對城市(c)和區縣(a)進行判斷,選擇

//初始化城市
     $("#city").append("<option value='0'>請選擇城市</option>");
       for(var i=0;i<cityArr[p-1].length;i++){
           if(c==i+1){
               $("#city").append("<option value='"+(i+1)+"' selected='selected'>"+cityArr[p-1][i]+"</option>");   
           }else{
               $("#city").append("<option value='"+(i+1)+"'>"+cityArr[p-1][i]+"</option>");
           }
       }

     //初始化區域
     $("#area").append("<option value='0' >請選擇區域 </option>");
       for(var i=0;i<cityArr[p-1][c-1].length;i++){
           if(a==i+1){
               $("#area").append("<option value='"+(i+1)+"' selected='selected'>"+areaArr[p-1][c-1][i]+"</option>");
           }else{
               $("#area").append("<option value='"+(i+1)+"'>"+areaArr[p-1][c-1][i]+"</option>");
           }
       }

其他地方不需改動,我們現在再來看看效果,根據p、c、a的值和數組裡對比,頁面應該預設選中
重慶—萬州—百安

網頁上是什麼呢
個性化初始化

驗證自定義成功。

那這樣的修改有何意義呢。

當我們在某些網站填寫個人地址時,第一次是由我們自己選擇,這時系統已經把我操作的資料存入資料庫了。當我下次進行資料修改時,系統預設地址顯示的就是我上次存入的資料,原理就是我上面的操作(不過我目前道行不夠,還未進行資料庫操作~~)。

到此這篇文章正式結束啦~
謝謝各位大佬點選~~