JavaScript结合后端实现省市区三级联动下拉框
作者:开源拾贝时间:2026-10-23 15:49:42浏览:99
本文详细介绍如何使用JavaScript在前端实现省市区三级联动下拉框,并配合Java后端提供数据支持。通过jQuery动态生成选项,利用AJAX异步获取数据,后端从内存表中查询并返回JSON格式数据,最终实现高效的数据交互与展示。
省市区三级联动概述
本文分享了一个使用JavaScript实现省市区三级联动的完整示例,供读者参考学习。
前端JavaScript实现
首先介绍前端JavaScript部分的实现逻辑。
$(document).ready(function(){
getErpMarketByParentCode(0,'province',province);
getErpMarketByParentCode(province,'city',city);
getErpMarketByParentCode(city,'area',area);
getErpMarketByParentCode(area,'market',market);
$('#city').append($('<option>').val('').html('-请选择-')).val('');
$('#area').append($('<option>').val('').html('-请选择-')).val('');
if($('#market')){
$('#market').append($('<option>').val('').html('-请选择-')).val('');
}
$('#province').change(function(){
if($(this).val() == ''){ // 请选择
$('#city').empty();
$('#area').empty();
$('#city').append($('<option>').val('').html('-请选择-')).val('');
$('#area').append($('<option>').val('').html('-请选择-')).val('');
if($('#market')){
$('#market').empty();
$('#market').append($('<option>').val('').html('-请选择-')).val('');
}
return;
}
getErpMarketByParentCode($(this).val(),'city');
$('#area').empty();
$('#area').append($('<option>').val('').html('-请选择-')).val('');
});
$('#city').change(function(){
getErpMarketByParentCode($(this).val(),'area');
if($('#market')){
$('#market').empty();
$('#market').append($('<option>').val('').html('-请选择-')).val('');
}
});
$('#area').change(function(){
getErpMarketByParentCode($(this).val(),'market');
});
});
function getErpMarketByParentCode(parentCode, id, value){
$.ajax({
url:'/getErpMarketByParentCode',
type:'post',
data:{
code:parentCode
},
dataType : 'json',
error:function(){
alert('error');
},
success:function(data){
var select = $('#' + id);
if(select){
select.empty();
select.append($('<option>').val('').html('-请选择-'));
$.each(data.erpMarketList,function(i, erpMarket){
select.append($('<option>').val(erpMarket.code).html(erpMarket.name));
});
select.val(value);
}
}
});
}
后端Java接口处理
接着展示后端Java方法的编写方式。
@RequestMapping(value = "/getErpMarketByParentCode")
public ModelAndView getErpMarketByParentCode(HttpServletRequest request, HttpServletResponse response) throws Exception {
String code = request.getParameter("code");
List<ErpMarket> erpMarketList = erpMarketService.getErpMarketListByParentCode(code);
JSONObject jsonObject = new JSONObject();
jsonObject.put("erpMarketList",erpMarketList);
response.getWriter().write(jsonObject.toString());
return null;
}
Service层数据查询
Service层方法负责从内存中的省市区数据表中读取信息。
public List<ErpMarket> getErpMarketListByParentCode(String parentCode){
Hashtable erpMarketTable = LoadOnStartService.erpMarketTable;//从内存中获取这张表
List<ErpMarket> erpMarketList = new ArrayList<ErpMarket>();
Iterator its = erpMarketTable.keySet().iterator();
while(its.hasNext()){
String key = Util.getString(its.next());
ErpMarket erpMarket = (ErpMarket)erpMarketTable.get(key);
if(parentCode.equals(erpMarket.getParentCode())){
erpMarketList.add(erpMarket);
}
}
return erpMarketList;
}
实体类定义
以下是省市区实体类的定义代码。
package com.erp.entity;
/**
* ErpMarket entity.
*
* @author MyEclipse Persistence Tools
*/
public class ErpMarket implements java.io.Serializable {
// Fields
private String code;
private String shortCode;
private String name;
private String level;
private String parentCode;
// Constructors
/** default constructor */
public ErpMarket() {
}
/** full constructor */
public ErpMarket(String shortCode, String name, String level, String parentCode) {
this.shortCode = shortCode;
this.name = name;
this.level = level;
this.parentCode = parentCode;
}
// Property accessors
public String getCode() {
return this.code;
}
public void setCode(String code) {
this.code = code;
}
public String getShortCode() {
return this.shortCode;
}
public void setShortCode(String shortCode) {
this.shortCode = shortCode;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getLevel() {
return this.level;
}
public void setLevel(String level) {
this.level = level;
}
public String getParentCode() {
return this.parentCode;
}
public void setParentCode(String parentCode) {
this.parentCode = parentCode;
}
}
以上内容即为本文的全部讲解,希望能为各位的学习带来帮助,同时也欢迎大家继续支持本站。
作者最新文章
JS 怎么使用 pako.js 解压 gzip 数据流
2026-11-05 15:54:33
零基础先学JavaScript还是Python?对比学习难度与上手曲线
2026-11-05 14:47:40
JS代码反混淆:主流在线工具与本地软件推荐
2026-11-04 19:28:41
浏览器控制台查看格式化JSON有哪些实用技巧
2026-11-04 16:56:53
JS控制台打印基础:console.log语法与多参数用法
2026-11-04 09:23:11
