级联下拉列表绑定 地区JS文件

  在我们的项目中,假如,我们要记录用户的家乡或现在所在地(包话省、市、区等),我们可能会在数据库中建立一个地区表,然后在用户表的相应字段中,存入地区码,我们读取的时候,增加了查询次数, 还有我们前台页面的下拉列表中要绑定所有的省、市、区等,特别是级联的时候,我们要重执行多次查询。那么,今天我给大家分享一个我平时使用的JS地区表的方法。先贴个图,有图有真像:

<html>
<head>
    <script src="jquery-1.7.min.js" type="text/javascript"></script>
    <script src="Area.js" type="text/javascript"></script>
    <script src="AreaData_min.js" type="text/javascript"></script>
    <script type="text/javascript">

        //初始化加载地区 如果不须要请把后三个参数改为 "0"
$(function () { initComplexArea('seachprov', 'seachcity', 'seachdistrict', area_array, sub_array, '44', '0', '0'); }); //得到地区码 function getAreaID() { var area = 0; if ($("#seachdistrict").val() != "0") { area = $("#seachdistrict").val(); } else if ($("#seachcity").val() != "0") { area = $("#seachcity").val(); } else { area = $("#seachprov").val(); } return area; } function showAreaID() { //地区码 var areaID = getAreaID(); //地区名 var areaName = getAreaNamebyID(areaID) ; alert("您选择的地区码:" + areaID + " 地区名:" + areaName); } //根据地区码查询地区名 function getAreaNamebyID(areaID) { var areaName = ""; if (areaID.length == 2) { areaName = area_array[areaID]; } else if (areaID.length == 4) { var index1 = areaID.substring(0, 2); areaName = area_array[index1] + " " + sub_array[index1][areaID]; } else if (areaID.length == 6) { var index1 = areaID.substring(0, 2); var index2 = areaID.substring(0, 4); areaName = area_array[index1] + " " + sub_array[index1][index2] + " " + sub_arr[index2][areaID]; } return areaName; } </script> </head> <body > <select id="seachprov" name="seachprov" onchange="changeComplexProvince(this.value, sublocation_array, 'seachcity', 'seachdistrict', true);"> </select>   <select id="seachcity" name="homecity" onchange="changeCity(this.value,'seachdistrict','seachdistrict');"> </select>   <span id="seachdistrict_div"> <select id="seachdistrict" name="seachdistrict"> </select></span> <input type="button" value="获取地区" onclick="showAreaID()"/> </body> </html>

  在上面的DEMO中总共用到两个JS文件(还有一个你懂的)

  1:Area.js 所有的操作方法放在里面

      2: AreaData_min.js 就是地区码表

首先,我们的用户表中家乡字段(不管什么表,反正要存省市区的字段就OK)长度设6个字符就行(最长的只有6位吧,不知道有没有多的),只需要存入对应省市区的地区码就行。

下面说说地区码(其实我们的身份证上的前6位就是地区码,在网上那些普通查询身份证信息的就是从这6个数字就可以知道你是哪个省市区,当然身份证号的倒数第2个吧,还可以知道男女。只有公安局的查询系统才能真正查询到信息的,但是那是要花钱的好像是5块一次,哈哈,说多了):

  如:”广东省“:“44” 

        “广东省深圳市”:“4403”

    “广东省深圳市罗湖区”:“440303”

全国所有的省市区地区码我们就把它存在JS文件中,我们知道省市区都是级联关系,我们根据这个关系再结合JS的多维数组就可以搞定了。

先插入代码看看:

var area_array=[];
var sub_array=[];
area_array[0] = "请选择";
area_array[11]="北京市";
sub_array[11]=[];
sub_array[11][0]="请选择";
sub_array[11][1101]="东城区";
sub_array[11][1102]="西城区";
sub_array[11][1103]="崇文区";
sub_array[11][1104]="宣武区";
sub_array[11][1105]="朝阳区";
sub_array[11][1106]="丰台区";
sub_array[11][1107]="石景山区";
sub_array[11][1108]="海淀区";
sub_array[11][1109]="门头沟区";
sub_array[11][1111]="房山区";
sub_array[11][1112]="通州区";
sub_array[11][1113]="顺义区";
sub_array[11][1114]="昌平区";
sub_array[11][1115]="大兴区";
sub_array[11][1116]="怀柔区";
sub_array[11][1117]="平谷区";
sub_array[11][1128]="密云县";
sub_array[11][1129]="延庆县";

  

我们来说说地区码 area.js,在文件中有三个数组,

 area_array   省

sub_array   市

sub_arr    区

上面这段示例代码中北京是直辖市所以只用到二两个数组 假如我数据库中存的地区码是 “11” 那么对照地区码肯定就是北京人了。

AreaData_min.js 这个文件中的方法呢,就有点小小复杂了,在这里就不做太多的解说,只要会调用方法就行,有兴趣的朋友可以研究。

页面加载的时候,调用这个方法initComplexArea() 存在于AreaData_min.js之中

方法里有8个参数这个都是要滴。       

    //初始化加载地区 如果不须要请把后三个参数改为 "0"
        $(function () {
            initComplexArea('seachprov', 'seachcity', 'seachdistrict', area_array, sub_array, '44', '0', '0');
        });

 

<select id="seachprov" name="seachprov" onchange="changeComplexProvince(this.value, sublocation_array, 'seachcity', 'seachdistrict', true);">
    </select>  
    <select id="seachcity" name="homecity" onchange="changeCity(this.value,'seachdistrict','seachdistrict');">
    </select>   <span id="seachdistrict_div">
        <select id="seachdistrict" name="seachdistrict">
        </select></span>

第1个:省份下拉列表ID( 建议把 下拉列表的ID和name 都写成一样)不能为空

第2个:市下拉列表ID 不能为空

第3个:区下拉列表ID  不能为空

第4个:数组名(省)  不能为空

第5个:数组名(市)  不能为空 

第6个:加载默认值(省) 不须要时写“0”

第7个:加载默认值(市) 不须要时写“0”(必须先有省才行)

第8个:加载默认值(区) 不须要时写“0”(必须先有省、市才行,你懂的)

 

 changeComplexProvince()存在于AreaData_min.js之中  

changeCity() 存在于AreaData_min.js之中

这两个方法就不多说了,照着用就行.

再来看看前台调用:

假如你的下表列表已经绑定Ok,我们在存入数据库的时候只要在JS写获取相应的下拉列表的值就行

//得到地区码
        function  getAreaID() {
            var area = 0;          
            if ($("#seachdistrict").val() != "0") {
                area = $("#seachdistrict").val();                
            }
            else if ($("#seachcity").val() != "0") {
                area = $("#seachcity").val();
            }
            else {
                area = $("#seachprov").val();
            }            
            return area;
        }

 这个方法就是得到你选择的地区码。

****再多说一个地区码转换到地区名的方法 例如:你传一个“44” 返回广东省,传一个"4403"肯定就是广东省深圳市 自己可以测试。

//根据地区码查询地区名
        function getAreaNamebyID(areaID) {
            var areaName = "";
            if (areaID.length == 2) {
                areaName = area_array[areaID];
            }
            else if (areaID.length == 4) {
                var index1 = areaID.substring(0, 2);
                areaName = area_array[index1] + " " + sub_array[index1][areaID];
            }
            else if (areaID.length == 6) {
                var index1 = areaID.substring(0, 2);
                var index2 = areaID.substring(0, 4);
                areaName = area_array[index1] + " " + sub_array[index1][index2] + " " + sub_arr[index2][areaID];
            }
            return areaName;
        }

还有一个我们在存修改的时候怎么使用呢?

简单来说,就是在调用加载方法的时候,把默认值传进去就Ok。当然这个须要对地区码做一个字符串截取功能。

当地区码为2位肯定就只有省,其它两个就写0. 再贴一步段代码

var sheng = userArea.length >= 2 ? userArea.substr(0, 2) : 0;
 var shi = userArea.length >= 4 ? userArea.substr(0, 4) : 0;
 var qu = userArea.length >= 6 ? userArea.substr(0, 6) : 0;
   initComplexArea('seachprov', 'seachcity', 'seachdistrict', area_array, sub_array, sheng, shi, qu);

 源码下载

 

   

posted @ 2012-04-28 15:27  lhfly  阅读(6737)  评论(5编辑  收藏  举报