利用数据库,jQuery,js实现省市县三级联动

在数据库中存入省市县的简单模拟数据,让市的c_pid等于省pid,县的c_tid等于市的cid;

整体流程为:从首页点击超链接,进入servlet中查询到数据库中的省市县的信息保存到各自的集合中,集合的泛型分别为

Province,
City,
Town(省,市,县),前提在domain包中创建各自的类(省市县),然后通过重定向将数据传到jsp页面中,在页面中获取到省的信息,循环遍历输出到对应的下拉框中.将市和县的所有信息保存到隐藏框中备用.在jsp页面中导入jQuery的包.通过change事件实现省市县三级联动.参考代码如下发:

首页写一个超链接地址为servlet,此代码略.

servlet代码:

//到数据库查询,并将结果给页面
public class DemoServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //到数据库中查询所有数据并返回给页面
        MyService ms = new MyService();
        List<Province> provinces = ms.selectProvince();
        List<City> cities = ms.selectCity();
        List<Town> towns = ms.selectTown();
        HttpSession session = request.getSession();
        session.setAttribute("provinces",provinces);
        session.setAttribute("cities",cities);
        session.setAttribute("towns",towns);
        response.sendRedirect(request.getContextPath()+"/three.jsp");//重定向

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request,response);
    }

}

service层和dao层的代码:

public List<Province> selectProvince() {
    return showDao.selectProvince();
}

public List<City> selectCity() {
    return showDao.selectCity();
}

public List<Town> selectTown() {
    return showDao.selectTown();
}

 

public List<Province>  selectProvince() {
    String sql = "select * from province";
    List<Province> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Province.class));
    return list;
}

public  List<City> selectCity() {
    String sql = "select * from city";
    List<City> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(City.class));
    return list;
}

public List<Town> selectTown() {
    String sql = "select * from town";
    List<Town> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Town.class));
    return list;
}

页面代码为:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
    <head>
       <base href="<%=basePath%>"/>
        <!-- 指定字符集 -->
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>省市县联动</title>

        <link href="css/bootstrap.min.css" rel="stylesheet">
        <script src="js/jquery-3.3.1.js"></script>
        <script src="js/bootstrap.min.js"></script>
       
        <script>
            $(function () {
                $("#provinceId").change(function () {
                    //获取当前省的id
                    var proId=$(this).val();
                    //初始化市和县
                    $("#cityId").html("<option name =\"citname\" >请选择市</option>");
                    $("#townId").html("<option name =\"towname\" >请选择县</option>");
                    //获取所有的市的集合
                   var cityArr = $("input[type=hidden][name=citys]");
                   //获取所有县的集合
                    var townArr = $("input[type=hidden][name=towns]");
                   //遍历市的集合找到和当前省id对应的市添加到市的下拉框中
                   for (var i=0;i<cityArr.length;i++) {
                     var cpid=cityArr[i].getAttribute("cpid");
                       var cityId = cityArr[i].getAttribute("cid");
                       var cityname = $(cityArr[i]).val();
                       if (proId == cpid) {
                         $("#cityId").append("<option name ='citname' value="+cityId+">"+cityname+"</option>");
                     }
                   }

                   $("#cityId").change(function () {
                       //获取当前市的id属性值
                       var citId =$(this).val();
                           //初始化县
                       $("#townId").html("<option name =\"towname\" >请选择县</option>");
                       //遍历所有县的集合找到和当前市id相对应的县添加到下拉框中
                       for(var j=0;j<townArr.length;j++) {
                           var tcid=townArr[j].getAttribute("tcid");
                           var tname=$(townArr[j]).val();
                           var townId=townArr[i].getAttribute("tid");
                           if(citId == tcid) {
                               $("#townId").append("<option name ='towname' value="+townId+" >"+tname+"</option>");
                           }
                       }

                   });
                });
            })
        </script>
    </head>

    <body>
    <c:if test="${!empty cities}">
        <c:forEach items="${cities}" var="city">
            <input type="hidden" name="citys" value=" ${city.cname}" cpid="${city.c_pid}" cid=" ${city.cid}" />
        </c:forEach>
    </c:if>
    <c:if test="${!empty towns}">
        <c:forEach items="${towns}" var="town">
            <input type="hidden" name="towns" value=" ${town.tname}" tcid="${town.t_cid}" tid=" ${town.tid}" />
        </c:forEach>
    </c:if>
        <div class="container" style="width: 400px;">
        <h3 style="text-align: center;">省市县联动</h3>
        <form action="/day05/update" method="post">

      <div class="form-group">
        <label >籍贯:</label>
        <select name="address" class="form-control"  id="provinceId">
           <option >请选择省</option>
             <c:if test="${! empty provinces}">
                 <c:forEach items="${provinces}" var="province">
           <option  name ="proname" value="${province.pid}" >${province.pname}</option>
             </c:forEach>
             </c:if>
        </select>
          <select name="address" class="form-control" id="cityId" >
              <option name ="citname" >请选择市</option>
             
             
          </select>
          <select name="address" class="form-control" id="townId" >
              <option name ="towname" >请选择县</option>
              
          </select>
      </div>
        </form>
        </div>
        
    </body>

实现效果图为(在下拉框中选择省会弹出对应的市供选择,选择市会列出对应的县供选择);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值