layui多级联动下拉框的实现_简单三级联动的实现

2bb0453aa4df6349d7e17a14078aa962.png

当我们做一些例如注册页面的时候,可能会遇到要选择地址的操作,这时会出现三个选择框,当你选择省级单位的时候会自动在选择筐中,弹出她所属的市级单位的列表,当选择市级单位时又会弹出县级单位,我们要实现的就是这样的三级联动,当然也会有更简单的插件方法,但学习,我们可以通过这来看它运行的过程。我么要实现的需求是这样的:

  • 页面中有三个下拉框选项,分别为省下拉框,市下拉框,区/县下拉框
  • 选择省,则市下拉框中出现对应的该省下的市信息,选择市,则区/县下拉框中
  • 出现对应的该市下面的区/县信息

分析这个实现过程大致可以这样:

  • 1、创建页面:页面中有三个下拉框,分别为省、市、区/县
  • 2、页面加载成功发起ajax请求,请求省的信息,并将响应结果 填充到省下拉框中
  • 3、选择省触发一个新的js函数 的执行,该函数中发起新的ajax请求 请求该省下的市信息,并将响应数据填充到市下拉框
  • 4、选择市信息触发一个新的js函数的执行,该函数中发起新的ajax请求 请求该市下的区/县信息,并将数据填充到区/县下拉框中

数据库呢我们可以这样去构建:

创建表(area):存储了省、市、区/县信息

  • 设计表实现一:只存储了数据,但是数据之间的层级关系没有存储。
  • 地区id:areaid
  • 地区名:areaname
  • 设计表实现二:
  • 地区id:areaid
  • 地区名:areaname
  • 地区上级id:parentid

建表语句:

Create table area (areaid int auto_increment primary key,areaname varchar(10) not null,
parenteid int(20) not null,arealevlel int(2) not null,status int(3) not null)

创建好表之后就可以进行项目的构建了,在mvc思想下进行项目分层:

首先在pojo层新建实体类Area,他的属性为:要添加共有取值赋值方法等,带参无参构造等;

package com.bjsxt.pojo;public class Area {private int areaid;private String areaname;private int parentid;private int arealevel;private int status;

之后便是业务服务层,要有AreaServive接口与其实现方法

package com.bjsxt.service;import java.util.List;import com.bjsxt.pojo.Area;public interface AreaService {List<Area> selByPid(int parentid);}
package com.bjsxt.service.impl;import java.util.List;import com.bjsxt.dao.AreaDao;
import com.bjsxt.dao.impl.AreaDaoImpl;
import com.bjsxt.pojo.Area;
import com.bjsxt.service.AreaService;public class AreaServiceImpl implements AreaService {AreaDao ad= new AreaDaoImpl();@Overridepublic List<Area> selByPid(int parentid) {return ad.selByPid(parentid);}}

数据处理层

package com.bjsxt.dao;import java.util.List;import com.bjsxt.pojo.Area;public interface AreaDao {List<Area> selByPid(int parentid);}

数据层实现类

ackage com.bjsxt.dao.impl;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import com.bjsxt.dao.AreaDao;
import com.bjsxt.pojo.Area;
import com.bjsxt.util.DBUtil;public class AreaDaoImpl implements AreaDao {@Overridepublic List<Area> selByPid(int parentid) {//声明Connection conn=null;PreparedStatement ps=null;ResultSet rs=null;List<Area> list=new ArrayList<>();try {conn=DBUtil.getConnection();String sql="select * from area where parentid=?";ps = conn.prepareStatement(sql);ps.setInt(1, parentid);rs=ps.executeQuery();while(rs.next()){Area ar=new Area();ar.setAreaid(rs.getInt("areaid"));ar.setAreaname(rs.getString("areaname"));ar.setParentid(rs.getInt("parentid"));ar.setArealevel(rs.getInt("arealevel"));ar.setStatus(rs.getInt("status"));list.add(ar);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{DBUtil.closeAll(rs, ps, conn);}return list;}}

还有DBUtil工具类,就是连接数据库操作的一个工具类,很多种,就不列出来了。

接下来就servlet的构建

package com.bjsxt.servlet;import java.io.IOException;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.bjsxt.pojo.Area;
import com.bjsxt.service.AreaService;
import com.bjsxt.service.impl.AreaServiceImpl;
import com.google.gson.Gson;public class AreaServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//设置编码格式req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");//获取请求数据int parentid = Integer.parseInt(req.getParameter("parentid"));//处理请求数据AreaService ar= new AreaServiceImpl();List<Area> list= ar.selByPid(parentid);//处理响应//直接相应resp.getWriter().write(new Gson().toJson(list));}
}

项目展示jsp页面构建

%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'select.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript" src="js/jquery-1.9.1(1).js"></script><script type="text/javascript">$(function() {//默认省的信息getData(0,"pre");//选择市$("#pre").change(function(){var areaid=$("#pre").val();getData(areaid,"shi");})//县的信息$("#shi").change(function(){var areaid=$("#shi").val();getData(areaid,"xian");})function getData(areaid,sid) {$.get("area",{parentid:areaid},function(data){//将省数据放入到下拉框//使用eval将数据转化为json格式对象eval("var areas="+data);var sel=$("#"+sid);sel.empty();//遍历:for(var i=0;i<areas.length;i++){sel.append("<option value="+areas[i].areaid+">"+areas[i].areaname+"</option>");}$("#"+sid).trigger("change");		})}
})</script></head><body style="background-color: activecaption;text-align:center" ><div style="margin: auto;width=800px;margin-top: 200px">省:<select name="" id="pre" style="width:200px;height:30px;"></select>市:<select name="" id="shi" style="width:200px;height:30px;"></select>县:<select name="" id="xian" style="width:200px;height:30px;"></select></div></body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

django初探

首先在确保python已经安装之后(3.7), 安装django. 刚开始学习 只做了简单的测试 就是控制器与视图,路由的链接 首先 python manage.py startapp demo 使用此命令创建项目中的各个模块目录在各个目录中创建对应的子路由文件 然后将子路由文件引入到主路由文件中 也就是根目录的…

加载文件流_未关闭的文件流会引起内存泄露么?

专注于Java领域优质技术&#xff0c;欢迎关注来自&#xff1a;技术小黑屋最近接触了一些面试者&#xff0c;在面试过程中有涉及到内存泄露的问题&#xff0c;其中有不少人回答说&#xff0c;如果文件打开后&#xff0c;没有关闭会导致内存泄露。当被继续追问&#xff0c;为什么…

[vue] vue组件之间的通信都有哪些?

[vue] vue组件之间的通信都有哪些&#xff1f; 父子Coms: 1/2/3 ..兄弟Coms: 4/5跨级Coms: 4/5/6/7props$emit/$on( $parents/$children ) / $refsVuexBus( provide/inject )( $attrs/$listeners )个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&…

linux中配置phpcms v9 中的sphinx

#MySQL数据源配置&#xff0c;详情请查看&#xff1a;http://www.coreseek.cn/products-install/mysql/2 #请先将var/test/documents.sql导入数据库&#xff0c;并配置好以下的MySQL用户密码数据库34 #源定义56 source news_news7 {8 type mysql9 …

Microsoft Visio绘图

2000年微软公司收购同名公司后&#xff0c;Visio成为微软公司的产品。Microsoft Visio是Windows 操作系统下运行的流程图软件&#xff0c;它现在是Microsoft Office软件的一个部分。Visio可以制作的图表范围十分广泛&#xff0c;有些人利用Visio的强大绘图功能绘制地图、企业标…

[vue] 请描述下vue的生命周期是什么?

[vue] 请描述下vue的生命周期是什么&#xff1f; 生命周期就是vue从开始创建到销毁的过程&#xff0c;分为四大步&#xff08;创建&#xff0c;挂载&#xff0c;更新&#xff0c;销毁&#xff09;&#xff0c;每一步又分为两小步&#xff0c;如beforeCreate&#xff0c;create…

HTTP返回码中301与302的区别

一&#xff0e;官方说法 301&#xff0c;302 都是HTTP状态的编码&#xff0c;都代表着某个URL发生了转移&#xff0c;不同之处在于&#xff1a; 301 redirect: 301 代表永久性转移(Permanently Moved)。 302 redirect: 302 代表暂时性转移(Temporarily Moved )。 这是很官方…

10截图时屏幕变大_手机上网课、开视频会议,如何让屏幕变大一点?

点击图片进入商城▲车载闪充49.9秒杀&#xff01;Reno2 Z直降200元&#xff01;真无线耳机团购可省130元&#xff01;这个特殊时期很多伙伴和小O一样在家远程云办公、线上会议学生朋友们也是在家参加网上课程虽然现在的手机屏幕越来越大但总盯着手机还是难免眼酸但是掌握这个手…

mysql的命令行安装,忘记密码,密码重置问题

1.下载&#xff0c;安装msi 2.在MYSQL安装目录下&#xff0c;新建data目录 3.进入MYSQL的安装目录下&#xff0c;新建一个默认配置文件my.ini [mysql] # 设置mysql客户端默认字符集 default-character-setutf8 [mysqld] #设置3306端口 port 3306 # 设置mysql的安装目录 base…

电话邦php面试题及答案

程序设计; 1.200个数位于数组$a中,均为[1,199]之间的整数,仅有一个数和其他的重复,请用程序找出这个重复的数,算法尽量快速. 答案: function Repeat($a){ $unique_arr array_unique($a); $repeat_arr array_diff_assoc($a,$unique); return $repeat_arr; } $repeat_a…

分层和分段用什么符号_小编带你学直播——后牙树脂分层堆塑

后牙龋损过大&#xff0c;患者又不想做冠修复&#xff0c;树脂修补真的能挽救被龋坏侵蚀的牙体吗&#xff1f;补牙看起来简单&#xff0c;但是补好却难&#xff0c;同事用分层堆塑补的后牙窝沟分明&#xff0c;有点想学...本周小编为你推荐吕春阳老师——《后牙树脂分层堆塑》专…

CSAPP:第十一章 网络编程

CSAPP&#xff1a;第十一章 网络编程 11.1 客户端服务器模型11.2 全球IP因特网11.3 套接字接口 11.1 客户端服务器模型 每个网络应用都是基于客户端-服务器模型。采用这个模型&#xff0c;一个应用是由一个服务器进程和一个或者多个客户端进程组成。  客户端-服务器模型的基本…

[vue] 说下你对指令的理解?

[vue] 说下你对指令的理解&#xff1f; 指令 (Directives) 是带有 v- 前缀的特殊 attribute。指令 attribute 的值预期是单个 JavaScript 表达式 (v-for 是例外情况&#xff0c;稍后我们再讨论)。指令的职责是&#xff0c;当表达式的值改变时&#xff0c;将其产生的连带影响&a…

给数据库字段增加前缀

update users set mobile concat(86-, mobile)

动态表格数据序号从1开始_EXCEL对面的表姐看过来,你真的会给表格添加序号吗?...

原创作者&#xff1a; EH看见星光 转自&#xff1a;Excel星球哈罗&#xff0c;大家好&#xff0c;我是星光&#xff0c;今天给大家总结分享的表格技巧是……序号。什么是序号&#xff1f;序号就是一二三四五上山打老虎……一二三四一二三四像首歌……一二三四二二三四脖子扭扭屁…

[vue] 说说你对MVC、MVP、MVVM模式的理解

[vue] 说说你对MVC、MVP、MVVM模式的理解 MVVM用视图模型代替了MVP中的展示器&#xff0c;视图模型和视图实现了双向绑定&#xff0c;当视图发生变化的时候视图模型也会发生改变&#xff0c;当视图模型变化的时候视图也随之变化。MVP用展示器代替了控制器&#xff0c;而展示器…

设置公共请求参数_基于分布式锁的防止重复请求解决方案(值得收藏)

关于重复请求&#xff0c;指的是我们服务端接收到很短的时间内的多个相同内容的重复请求。而这样的重复请求如果是幂等的(每次请求的结果都相同&#xff0c;如查询请求)&#xff0c;那其实对于我们没有什么影响&#xff0c;但如果是非幂等的(每次请求都会对关键数据造成影响&am…

linux:vi 替换命令

:s/^.*$/\L&/100 &#xff03;&#xff03;将100行内的小写转换成大写 vi/vim 中可以使用 :s 命令来替换字符串。 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第…

[vue] 你有写过自定义指令吗?自定义指令的生命周期(钩子函数)有哪些?

[vue] 你有写过自定义指令吗&#xff1f;自定义指令的生命周期&#xff08;钩子函数&#xff09;有哪些&#xff1f; bind inserted update componentUpdated unbind个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎…

【niop2016】

D1T1 玩具谜题 my总结&#xff1a; 【luogu1563】【niop2016】玩具谜题 题面 模拟&#xff01;&#xff01;&#xff01; D1T2 天天爱跑步 my总结&#xff1a; 暂无 题面 我太弱了还搞不出来 暴力也不想写 D1T3 换教室 my总结&#xff1a;【niop2016】【luogu1600】…