用JS實現省市二級聯動
阿新 • • 發佈:2019-02-15
一、需求分析
我們希望在註冊頁面中新增一個欄位(籍貫),當用戶選擇一個具體的省份,在後面的下拉列表中動態載入該省份下所有的城市。顯示的效果如下:
二、技術分析
- 使用事件(onchange)
- 使用一個二維陣列來儲存省份和城市
- 獲取使用者選擇的省份(使用方法傳參的方式:this.value)
- 遍歷陣列(獲取省份與使用者選擇的省份比較,如果相同了,繼續遍歷該省份下所有的城市)
- 建立文字節點和元素節點並進行新增操作
createTextNode() 建立文字節點。
三、程式碼實現
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>註冊頁面重新佈局</title> <style type="text/css"> .top{ border: 1px solid red; width: 32.9%; height: 50px; float: left; } #clear{ clear: both; } #menu{ border: 1px solid blue; width: 99%; height: 40px; background-color: black; } #menu ul li{ display: inline; color: white; font-size: 19px; } #bottom{ text-align: center; } #content{ border: 5px solid gray; width: 50%; height: 60%; position: absolute; top: 100px; left: 300px; background-color: white; padding-top: 50px; } </style> <script> //1.建立一個二維陣列用於儲存省份和城市 var cities = new Array(3); cities[0] = new Array("武漢市","黃岡市","襄陽市","荊州市"); cities[1] = new Array("長沙市","郴州市","株洲市","岳陽市"); cities[2] = new Array("石家莊市","邯鄲市","廊坊市","保定市"); cities[3] = new Array("鄭州市","洛陽市","開封市","安陽市"); function changeCity(val){ //7.獲取第二個下拉列表 var cityEle = document.getElementById("city"); //9.清空第二個下拉列表的option內容 cityEle.options.length=0; //2.遍歷二維陣列中的省份 for(var i=0;i<cities.length;i++){ //注意,比較的是角標 if(val==i){ //3.遍歷使用者選擇的省份下的城市 for(var j=0;j<cities[i].length;j++){ //alert(cities[i][j]); //4.建立城市的文字節點 var textNode = document.createTextNode(cities[i][j]); //5.建立option元素節點 var opEle = document.createElement("option"); //6.將城市的文字節點新增到option元素節點 opEle.appendChild(textNode); //8.將option元素節點新增到第二個下拉列表中去 cityEle.appendChild(opEle); } } } } </script> </head> <body> <div> <div id="contanier"> <div id="content"> <table border="1" align="center" cellpadding="0" cellspacing="0" width="70%" height="70%" bgcolor="white"> <form method="get" action="#" onsubmit="return checkForm()"> <tr> <td colspan="2" align="center"> <font size="5">會員註冊</font> </td> </tr> <tr> <td> 使用者名稱 </td> <td> <input type="text" name="username" id="username" onfocus="showTips('username','必須以字母開頭')" onblur="check('username','使用者名稱不能為空')" /><span id="usernamespan"></span> </td> </tr> <tr> <td>密碼</td> <td> <input type="password" name="password" id="password" onfocus="showTips('password','密碼長度不能低於6位!')" onblur="check('password','密碼不能為空!')" /><span id="passwordspan"></span> </td> </tr> <tr> <td>確認密碼</td> <td> <input type="password" name="repassword" /> </td> </tr> <tr> <td>email</td> <td> <input type="text" name="email" id="email" /> </td> </tr> <tr> <td>姓名</td> <td> <input type="text" name="name" /> </td> </tr> <tr> <td>籍貫</td> <td> <select onchange="changeCity(this.value)"> <option>--請選擇--</option> <option value="0">湖北</option> <option value="1">湖南</option> <option value="2">河北</option> <option value="3">河南</option> </select> <select id="city"> </select> </td> </tr> <tr> <td>性別</td> <td> <input type="radio" name="sex" value="男"/>男 <input type="radio" name="sex" value="女"/>女 </td> </tr> <tr> <td>出生日期</td> <td> <input type="text" name="birthday" /> </td> </tr> <tr> <td>驗證碼</td> <td> <input type="text" name="yanzhengma" /> <img src="../img/yanzhengma.png" /> </td> </tr> <tr> <td colspan="2"> <input type="submit" value="註冊" /> </td> </tr> </form> </table> </div> </div> </div> </body> </html>