二级联动省市mysql数据库_用JS实现简单的省市联动

用JS实现简单的省市联动

技术分析:

使用 javascript 实现城市二级联动(onchange() 当下拉框变化时触发事件 createTextNode() 方法和 createElement() 方法以及 appendChild() 方法)。

代码步骤:

1、首先确定事件为 onchange() 事件,并为该事件绑定一个函数。书写该函数。

2、创建一个二维数组。

3、在判断用户选择的是哪一个省份。

4、获取该省份下的城市。

5、创建文本节点和元素节点,将文本节点添加到元素节点中。

6、获取第二个下拉框元素并把元素节点添加到第二个下拉框中。7、清除第二个下拉框(如果不清除,就会有上一次的遗留)。效果图如下:

97a719f6bfdd3bccf69ea01913f39f84.png

161904ec4e5d8a0087a8ccab2db4eb04.png

256abd05924b9274b0af4ff92c7e3d76.png

源代码如下:

省市联动

请选择

湖北省

湖南省

广东省

请选择

// 创建一个二维的数组,用来存储各个省份对应的城市

var cities = new Array();

cities[0] = new Array("武汉市","黄冈市","荆州市","仙桃市","黄石市","宜昌市");

cities[1] = new Array("长沙市","湘潭市","株洲市","衡阳市","岳阳市","郴州市");

cities[2] = new Array("广州市","珠海市","深圳市","东莞市","佛山市","茂名市");

function changeCity() {

// 获取省份的下拉框

var pro = document.getElementById("province");

// 获取城市下拉框

var city = document.getElementById("city");

// 获取你点击的省的value

var val = pro.value;

val = val - 1;

// 清空城市下拉框里面的城市

city.options.length = 1; //因为每次选新的省份,上次选的省份的城市也会出现,所以新添之前清空即可

// 遍历所有城市

for(var i=0;i

// 匹配省份对应的城市

if(val == i){

// 遍历用户选择的省份的城市 广东省这个里面的文本内容就称为文本节点。

for(var j=0;j

// 创建城市的文本节点

var text = document.createTextNode(cities[i][j]);

// 创建元素节点

var opt = document.createElement("option");

// 将城市的文本节点添加到option元素节点里面

opt.appendChild(text) ; //在option标签里添加一个子节点,子节点里放文本

// 将添加了文本内容的option标签放在上面城市下拉框里面

city.appendChild(opt); //在城市下拉框里添加子节点,里面放option标签

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现JavaWeb数据库动态加载全国省市区三级联动可以按照以下步骤进行: 1. 创建数据库表 首先需要创建数据库表,包括省、市、区/县三个表,每个表都应该有一个唯一的ID、名称和父ID,用于建立三个表之间的关联关系。 2. 编写JavaBean 然后需要编写对应的JavaBean,用于存储从数据库中查询到的省、市、区/县信息。 3. 编写DAO层 接着需要编写对应的DAO层,用于查询数据库中的省、市、区/县信息。 4. 编写Servlet 然后需要编写一个Servlet,用于接收前端页面传来的请求,调用DAO层查询数据库中的数据,并将结果返回给前端页面。 5. 编写前端页面 最后需要编写前端页面,用于展示省、市、区/县三级联动的下拉框,并通过Ajax调用Servlet获取数据库中的数据。 具体实现细节可以参考以下代码: 1. 数据库表结构 省表: CREATE TABLE `province` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 市表: CREATE TABLE `city` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `province_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `fk_province_id` (`province_id`), CONSTRAINT `fk_province_id` FOREIGN KEY (`province_id`) REFERENCES `province` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 区/县表: CREATE TABLE `district` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `city_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `fk_city_id` (`city_id`), CONSTRAINT `fk_city_id` FOREIGN KEY (`city_id`) REFERENCES `city` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 2. JavaBean 省JavaBean: public class Province { private int id; private String name; //省略getter和setter方法 } 市JavaBean: public class City { private int id; private String name; private int provinceId; //省略getter和setter方法 } 区/县JavaBean: public class District { private int id; private String name; private int cityId; //省略getter和setter方法 } 3. DAO层 省DAO: public class ProvinceDao { public List<Province> getAllProvinces() throws SQLException { List<Province> provinces = new ArrayList<>(); Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = DBUtil.getConnection(); String sql = "SELECT * FROM province"; stmt = conn.prepareStatement(sql); rs = stmt.executeQuery(); while (rs.next()) { Province province = new Province(); province.setId(rs.getInt("id")); province.setName(rs.getString("name")); provinces.add(province); } } finally { DBUtil.close(conn, stmt, rs); } return provinces; } } 市DAO: public class CityDao { public List<City> getCitiesByProvinceId(int provinceId) throws SQLException { List<City> cities = new ArrayList<>(); Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = DBUtil.getConnection(); String sql = "SELECT * FROM city WHERE province_id=?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, provinceId); rs = stmt.executeQuery(); while (rs.next()) { City city = new City(); city.setId(rs.getInt("id")); city.setName(rs.getString("name")); city.setProvinceId(provinceId); cities.add(city); } } finally { DBUtil.close(conn, stmt, rs); } return cities; } } 区/县DAO: public class DistrictDao { public List<District> getDistrictsByCityId(int cityId) throws SQLException { List<District> districts = new ArrayList<>(); Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = DBUtil.getConnection(); String sql = "SELECT * FROM district WHERE city_id=?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, cityId); rs = stmt.executeQuery(); while (rs.next()) { District district = new District(); district.setId(rs.getInt("id")); district.setName(rs.getString("name")); district.setCityId(cityId); districts.add(district); } } finally { DBUtil.close(conn, stmt, rs); } return districts; } } 4. Servlet 省Servlet: public class ProvinceServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { ProvinceDao provinceDao = new ProvinceDao(); List<Province> provinces = provinceDao.getAllProvinces(); String json = new Gson().toJson(provinces); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(json); } catch (SQLException e) { e.printStackTrace(); } } } 市Servlet: public class CityServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int provinceId = Integer.parseInt(request.getParameter("provinceId")); try { CityDao cityDao = new CityDao(); List<City> cities = cityDao.getCitiesByProvinceId(provinceId); String json = new Gson().toJson(cities); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(json); } catch (SQLException e) { e.printStackTrace(); } } } 区/县Servlet: public class DistrictServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int cityId = Integer.parseInt(request.getParameter("cityId")); try { DistrictDao districtDao = new DistrictDao(); List<District> districts = districtDao.getDistrictsByCityId(cityId); String json = new Gson().toJson(districts); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(json); } catch (SQLException e) { e.printStackTrace(); } } } 5. 前端页面 省市区三级联动下拉框: ``` 省:<select id="province"> <option value="">请选择省份</option> </select> 市:<select id="city"> <option value="">请选择城市</option> </select> 区/县:<select id="district"> <option value="">请选择区/县</option> </select> ``` Ajax调用: ``` <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <script> $(document).ready(function() { $.ajax({ type: "GET", url: "ProvinceServlet", success: function(data) { var options = ''; for (var i = 0; i < data.length; i++) { options += '<option value="' + data[i].id + '">' + data[i].name + '</option>'; } $('#province').append(options); }, error: function() { alert('获取省份列表失败!'); } }); $('#province').change(function() { var provinceId = $(this).val(); $('#city').empty().append('<option value="">请选择城市</option>'); $('#district').empty().append('<option value="">请选择区/县</option>'); if (provinceId != '') { $.ajax({ type: "GET", url: "CityServlet", data: { provinceId: provinceId }, success: function(data) { var options = ''; for (var i = 0; i < data.length; i++) { options += '<option value="' + data[i].id + '">' + data[i].name + '</option>'; } $('#city').append(options); }, error: function() { alert('获取城市列表失败!'); } }); } }); $('#city').change(function() { var cityId = $(this).val(); $('#district').empty().append('<option value="">请选择区/县</option>'); if (cityId != '') { $.ajax({ type: "GET", url: "DistrictServlet", data: { cityId: cityId }, success: function(data) { var options = ''; for (var i = 0; i < data.length; i++) { options += '<option value="' + data[i].id + '">' + data[i].name + '</option>'; } $('#district').append(options); }, error: function() { alert('获取区/县列表失败!'); } }); } }); }); </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值