JavaScript省市区三级联动实现方案:插件与无插件两种模式
作者:代码拾荒时间:2026-10-21 23:56:04浏览:472
本文介绍JavaScript实现省市区三级联动的两种主要方式。插件版包含distpicker和另一种基于jQuery的插件,提供现成的HTML结构示例与CSS/JS资源链接。无插件版则通过加载pdata.js数据文件,利用原生逻辑实现地区选择,适合希望减少依赖或自定义程度更高的开发场景。
省市区级联实现概述
前端实现省市区三级联动的方案多种多样,开发者应根据实际项目需求选择最合适的实现路径。
插件版实现方案
若选择使用插件方案,通常提供两种不同的实现方式供选择。
第一种插件方案基于distpicker库。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="css/city.css" rel="external nofollow" rel="external nofollow" rel="stylesheet" type="text/css" />
<script src="js/jquery-2.2.0.min.js"></script>
<script src="js/distpicker.data.js"></script>
<script src="js/distpicker.js"></script>
</head>
<body>
<h5>Demo:</h5>
<form class="form-inline">
<div data-toggle="distpicker">
<div class="form-group">
<label class="sr-only" for="province1">Province</label>
<select class="form-control" id="province1"></select>
</div>
<div class="form-group">
<label class="sr-only" for="city1">City</label>
<select class="form-control" id="city1"></select>
</div>
<div class="form-group">
<label class="sr-only" for="district1">District</label>
<select class="form-control" id="district1"></select>
</div>
</div>
</form>
</body>
</html>

需要下载并引入distpicker.data.js与distpicker.js文件,下载地址见相关资源链接。
第二种插件方案采用不同的实现逻辑。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="css/city.css" rel="external nofollow" rel="external nofollow" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/city.min.js"></script>
</head>
<body>
<div id="content-wrap">
<div id="content-left" class="demo">
<form action="" name="form1">
<div class="infolist">
<lable>所在地区:</lable>
<div class="liststyle">
<span id="Province">
<i>请选择省份</i>
<ul>
<li><a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" alt="请选择省份">请选择省份</a></li>
</ul>
<input type="hidden" name="cho_Province" value="请选择省份">
</span>
<span id="City">
<i>请选择城市</i>
<ul>
<li><a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" alt="请选择城市">请选择城市</a></li>
</ul>
<input type="hidden" name="cho_City" value="请选择城市">
</span>
<span id="Area">
<i>请选择地区</i>
<ul>
<li><a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" alt="请选择地区">请选择地区</a></li>
</ul>
<input type="hidden" name="cho_Area" value="请选择地区">
</span>
</div>
</div>
</form>
</div>
<div id="content-right"></div>
</div>
</body>
</html>

该方案依赖jQuery库,需下载jquery.min.js文件,下载地址见相关资源链接。
同时需引入对应的CSS样式文件,下载地址见相关资源链接。
无插件版实现方案
若不使用任何第三方插件,可采用纯代码实现方案。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="external nofollow" >
</head>
<body>
<p> </p>
<div class="row">
<div class="col-sm-12">
<div class="form-group">
<label class="control-label col-sm-2">所在区域</label>
<div class="col-sm-3">
<select name="input_province" id="input_province" class="form-control">
</select>
</div>
<div class="col-sm-3">
<select name="input_city" id="input_city" class="form-control">
</select>
</div>
<div class="col-sm-3">
<select name="input_area" id="input_area" class="form-control">
</select>
</div>
</div>
</div>
</div>
<p> </p>
<div class="row text-center">数据来源:
<a href="http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201504/t20150415_712722.html" target="_blank">http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201504/t20150415_712722.html</a>
</div>
<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="js/pdata.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$(function() {
var html = "<option value=''>== 请选择 ==</option>";
$("#input_city").append(html);
$("#input_area").append(html);
$.each(pdata, function(idx, item) {
if(parseInt(item.level) == 1) {
html += "<option value='" + item.name + "' exid='" + item.code + "'>" + item.name + "</option>";
}
});
$("#input_province").append(html);
$("#input_province").change(function() {
if($(this).val() == "") return;
$("#input_city option").remove();
$("#input_area option").remove();
var code = $(this).find("option:selected").attr("exid");
code = code.substring(0, 2);
var html = "<option value=''>== 请选择 ==</option>";
$("#input_area").append(html);
$.each(pdata, function(idx, item) {
if(parseInt(item.level) == 2 && code == item.code.substring(0, 2)) {
html += "<option value='" + item.name + "' exid='" + item.code + "'>" + item.name + "</option>";
}
});
$("#input_city").append(html);
});
$("#input_city").change(function() {
if($(this).val() == "") return;
$("#input_area option").remove();
var code = $(this).find("option:selected").attr("exid");
code = code.substring(0, 4);
var html = "<option value=''>== 请选择 ==</option>";
$.each(pdata, function(idx, item) {
if(parseInt(item.level) == 3 && code == item.code.substring(0, 4)) {
html += "<option value='" + item.name + "' exid='" + item.code + "'>" + item.name + "</option>";
}
});
$("#input_area").append(html);
});
//绑定
$("#input_province").val("山东省");
$("#input_province").change();
$("#input_city").val("潍坊市");
$("#input_city").change();
$("#input_area").val("诸城市");
});
</script>
</body>
</html>

需下载pdata.js数据文件,下载地址见相关资源链接。
以上即为本文介绍的全部内容,希望能为读者提供有益参考,欢迎继续支持本站获取更多技术资讯。
作者最新文章
JavaScript入门书籍避坑:这些书不适合初学者
2026-11-05 16:31:15
JS使用Math.round实现保留两位小数的原理与代码
2026-11-05 15:35:55
JavaScript 原生 Date 对象怎么实现日期加减
2026-11-05 14:30:00
JavaScript函数定义的三种方式:声明、表达式与箭头函数
2026-11-05 13:50:55
JavaScript中escape、encodeURI和encodeURIComponent对空格的处理差异
2026-11-05 12:47:23
