說明(2017-12-13 11:03:58):
1. 這個功能應該是注冊的時候非常、常用的了,不過現在都是微信登錄,手機端自動獲取位置什么的,可能就網站還用用吧!
2. 這個東西的難點在於統計各地省、市、自治區、以及茫茫多的地級市,是用數組還是json存?其實都可以,但要自己寫,估計寫兩個省就跪了,真的是非常之多啊!所以無奈只能用別人寫好的數組或json,而你一旦用了別人的數組或json,你就很難不用別人配套的js代碼了,那我自己還寫個J8啊!
3. 其實主要是為了了解一下三級聯動的思路,學習一下jquery的簡單操作。另外,畢竟別人寫的,跟自己的需求有些出入,有些地方得知道怎么改。
4. 雖然最后還是用了別人的代碼,哇哈哈哈哈!實在是不想自己創建省市數組!而且人家也沒用jquery,用的原生js。雖然我也只是用了幾個jquery的選擇器。。
下面是自己寫的demo,要引用jquery:
city.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <select id="province"> <option value="value">選擇省</option> <!--<option value="value">北京</option> <option value="value">山東</option>--> </select> <select id="city"> <option value="value">選擇市</option> </select> <select id="district"> <option value="value">選擇區</option> </select> </body> <script src="jquery1.11.3.js" type="text/javascript"></script> <script src="city.js" type="text/javascript"></script> <script type="text/javascript"> //獲取省、市、區select節點 var province = $("#province"); var city = $("#city"); var district = $("#district"); //提前定義動態變量市、區 var cities; var districts; //定義省、市下標 var p_num; var c_num; //添加省 for (var i = 0; i < provinces.length; i++) { province.append("<option value='value'>" + provinces[i] + "</option>"); } //選擇省后,添加市(如果點“選擇省”,清空市區)(如果沒查到對應的市,默認填充為“選擇市”) province.change(function () { //先清空市、區 city.empty(); district.empty(); city.append("<option value='value'>選擇市</option>"); district.append("<option value='value'>選擇區</option>"); var p = province.find("option:selected").text(); if (p == "選擇省") { city.empty(); city.append("<option value='value'>選擇市</option>"); } else { //查找選擇的省的下標 for (var i in provinces) { if (provinces[i] == p) { p_num = i; } } //網上一堆說eval不行的,不安全的,有很多替代方法的。麻痹找了一頓也沒找到,我就用eval了! //動態查找市的變量名,顯示 cities = eval("p" + p_num); for (var i in cities) { city.append("<option value='value'>" + cities[i] + "</option>"); } } } ); //選擇市后,添加區(如果點“選擇市”,清空區)(如果沒查到對應的區,默認填充為“選擇區”) city.change(function () { var c = city.find("option:selected").text(); if (c == "選擇市") { district.empty(); district.append("<option value='value'>選擇區</option>"); } else if ($.inArray(c, cities)) { //jquery的inarray方法,判斷某個元素是不是在數組中 district.empty(); district.append("<option value='value'>選擇區</option>"); } else { for (var i in cities) { if (c == cities[i]) { c_num = i; } } // alert("p" + p_num + "_" + c_num); districts = eval("p" + p_num + "_" + c_num); for (var i in districts) { district.append("<option value='value'>" + districts[i] + "</option>"); } } }); </script> </html>
city.js
var provinces = ["山東", "北京"]; var p0 = ["濟南市", "青島市", "淄博市", "棗庄市"]; var p0_0 = ["市中區", "歷下區", "天橋區", "槐蔭區"]; var p0_1 = ["市南區", "市北區", "李滄區", "四方區"]; var p1 = ["北京"]; var p1_0 = ["東城", "西城", "海淀", "朝陽"];
補充:
1. 網上有人說可以這么寫,變量中可以存儲數組,但是這樣有一個問題,如果有兩個省份,有兩個重名的市,那數組就會重名,比如北京的朝陽區,和遼寧的朝陽市,不過這倆可以通過區和市分成兩個數組,但是其他地方有沒有重名的市我就沒做過調查了,應該說是有風險的。
var provinces = ["山東", "北京"]; Array["山東"] = ["濟南市", "青島市", "淄博市", "棗庄市"]; Array["濟南市"] = ["市中區", "歷下區", "天橋區", "槐蔭區"]; Array["青島市"] = ["市南區", "市北區", "李滄區", "四方區"]; Array["北京"] = ["北京市"]; Array["北京市"] = ["東城", "西城", "海淀", "朝陽"];
2. 我是用了純數組的辦法,一般網上比較好的示例都是用的json,比如下面這個,我就准備抄這個了: