1. 程式人生 > >用JS實現省市二級聯動

用JS實現省市二級聯動

一、需求分析

我們希望在註冊頁面中新增一個欄位(籍貫),當用戶選擇一個具體的省份,在後面的下拉列表中動態載入該省份下所有的城市。顯示的效果如下:


二、技術分析

  • 使用事件(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>