• 转载省市县三级联动


    不废话,上代码! 大神 勿喷!!!

    <!--JSP代码-->
    <tr>
                    <td>地址:</td>
                    <!--第一级:省 -->
                    <td><select id="province" name="province" onchange="f1()">
                            <option>---请选择---</option>
                            <!--第二级:市 -->
                    </select> <select id="city" name="city" onclick="f2()">
                            <option>---请选择---</option>
                      <!--第三级:县 -->
                    </select> <select name="country" id="country">
                            <option>---请选择---</option>
                    </select></td>
                </tr>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    //JS 代码
    /*
     PID就是他的父ID  省的PID都是1,所以给后台传的的时候直接是1;返回一个JSON;大家都懂!
     这个得到了第一级的
    */
        $(function() {
    
            $.post("getSJLD.action", {
                pid : 1
            }, function(data) {
                for ( var i in data) {
                    var op = $("<option value='"+data[i].id+"'>" + data[i].cityname
                            + "</option>");
                    $("#province").append(op);
                }
            }, "json"
    
            )
        })
    /*在下面我会解释为什么有 city  和  country (For:回显)
    而且大家可以看到我在追加完之后有个判断;
    那个是修改回显的时候用到的;单纯的出现是三级联动是用不到的
    f2()同理
        通过第一级得到第二级
        $("#province").val()是第一级的ID;注意不是PID!!!
    */
        function f1(city,country) {
            $.post("getSJLD.action", {
                pid : $("#province").val()
            }, function(data) {
                $("#city").empty();
                for ( var i in data) {
                    var op = $("<option id='city"+data[i].id+"' value='"+data[i].id+"'>" + data[i].cityname
                            + "</option>");
                    $("#city").append(op);
                            if(city!=null){
                                $("#city option").each(function(){
                                    if($(this).text()==city){
                                        $(this).attr("selected",true)
                                    }
                                    f2(country)                 
                                })
                            }
                }
            }, "json")
        }
    
    //通过第二级获取到第三级
    
        function f2(country) {
            $.post("getSJLD.action", {
                pid : $("#city").val()
            }, function(data) {
                $("#country").empty();
                for ( var i in data) {
                    var op = $("<option>" + data[i].cityname + "</option>");
                    $("#country").append(op);
                    if(country!=null){
                                $("#country option").each(function(){
                                    if($(this).text()==country){
                                        $(this).attr("selected",true)
                                    }
    
                                })
                            }
                }
            }, "json")
        }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68

    JS 获取三级联动的值:采用拼接的方式

    var adr = "";
    adr += $("#provinceoption:selected").text()+" "
                            + $("#city option:selected").text()+" "
                            + $("#country option:selected").text();
    
    • 1
    • 2
    • 3
    • 4
    • 5

    大家可以看到我在每个取值的后面都加了一个+” ”
    这个呢是为了修改的时候取值方便。直接用split(” “) 分割就OK了;

    以上呢就是添加的
    效果如图
    这个就是完成的效果

    添加成功以后的效果如图

    这里写图片描述
    因为在上面我取值的时候多加了一个 ” “!所有添加到数据库的时候就会就一个间隔

    接下来就是修改回显了

    首先我们要从数据库获取到值
    因为我是用esayui做的 所以我的取值是这样的

    这里写图片描述
    取值就不用说。大家都会!
    那么现在city就是我们取到的地址的值

          /*上面已经提到;在取到值得时候;因为添加的时候是" ";隔开添加的;
             所以我们在取到值 之后用  split(" ")  切割   
             citys[0] 呢就是 省 的值
             citys[1] 就是 市 的值
             citys[2] 就是 县 的值
    
               */
               var  citys=city.split(" ");
    
                  $("#province option").each(function() {
            /*遍历省下拉框;判断下拉框值是否和取到的省的值相同;
              相同就选中;选中之后紧接着就是第二级了;上面大家应该看到了
              f1()代表第二级;   所以在选中之后进行f1()
              并将 市 和 县 的值传过去; 
             (县的值在f1()里面是不用的,是为了给f2()传过去的)
              */
                      if($(this).text()==citys[0]){
                         $(this).attr("selected",true);
                        //var sheng = $(this).val();
                        f1(citys[1],citys[2])
                     }
                })  
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    大家这个时候返回上面看第二级和第三级 联动那一块的判断代码
    如图:
    这里写图片描述

    写到这里大家就应该清楚为什么要将 City 和 Country 给传过来了

    第三级也是同理;便可回显!
    这里写图片描述

    好了!修改回显就完成了!
    效果如图:

    这里写图片描述

    后台代码就是一个单表的查询
    SELECT * FROM city WHERE pid = #{pid}
    // #{pid}就是你传过去的值!

    下面是表结构!
    这个百度一大推!大同小异!方法是一样的!只要看好表结构知道怎么取值就行!

    CREATE TABLE city (
    id int(11) NOT NULL DEFAULT ‘0’,
    pid int(11) DEFAULT NULL,
    cityname varchar(255) CHARACTER SET utf8 DEFAULT NULL,
    type int(11) DEFAULT NULL,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


    全部数据大家点击链接下载
    具体链接: http://pan.baidu.com/s/1qXSHmc0 密码: vcaa
    里面有sql文件!

  • 相关阅读:
    DirectSound学习笔记(7):缓冲区操作
    Firebird MsSQL Data Types比较
    插座上的Linux充电器.不..Marvell Plug Computer
    ASP.NET / 学习asp.net比较完整的流程
    P2P穿透UDP/TCP原理
    在C#中利用ActiveX控件进行视频采集
    ffmpeg快速命令使用
    Win7上帝模式
    DirectSound学习笔记(3):协作级别
    自己写的一个asp.netcookies购物车类
  • 原文地址:https://www.cnblogs.com/xiaohaigege666/p/9219033.html
Copyright © 2020-2023  润新知