js 多级联动(省、市、区)

CreateTime--2018年4月9日17:10:38

Author:Marydon

方式一:

  数据从数据库获取,ajax实现局部刷新

方式二:

  数据从json文件获取,ajax实现局部刷新

以方式二为例,进行演示(省市区三级联动)

前提:需要有省、市、区三个的数据封装文件

代码实现

  1.自封装函数

/**
* 多级联动
*/
function MultipleCascades() { var containerId = "";
var num = "";
var textArray = ""; // 参数初始化
this.init = function(initParams) {
if (!initParams) return; containerId = initParams['containerId'];
num = initParams['selectNum'];
textArray = initParams['textDescraption']; for (var i = ; i <= num; i++) {
var selectId = "linkage" + i;
this.selectFactory(selectId,textArray[i-]);
}
}; // 创建select标签
this.selectFactory = function(id,text) {
// 创建文本提示
var spanElement = document.createElement('span');
spanElement.className = "textBox";
spanElement.innerHTML = text;
$('#' + containerId).append(spanElement); // 创建select标签
var selectElement = document.createElement('select');
selectElement.id = id;
selectElement.className = "selectStyle";
// 给select标签填充空的option标签
var optionElement = document.createElement('option');
optionElement.value = "";
optionElement.innerHTML = "--请选择--";
selectElement.appendChild(optionElement); $('#' + containerId).append(selectElement);
}; // select标签绑定onchange事件
this.bindChangeEvent = function(selectId,setData) { $('#' + selectId).change(function () {
var j = parseInt(selectId.substring()) + ;
// 将本select标签和它后面的联动标签移除掉
for (;j <= num; j++) {
$('#linkage' + j + ' option:gt(0)').remove();
} var selectValue = $('#' + selectId).val();
if (!selectValue) return;
setData();
}); }
};

  HTML片段

<div id="selectContainer"></div>

  2.调用

  方法一:

$(function(){
var mc = new MultipleCascades();
mc.init({
'containerId':'selectContainer',
'selectNum':3,
'textDescraption':['省:','市:','区:']
}); // 2.获取省份信息
$.getJSON("json/province.json",function(provinces){
var optionTags = "";
$(provinces).each(function(index,obj){
optionTags += "<option value=" + obj.id + ">" + obj.name + "</option>";
});
$('#linkage1').append(optionTags);
}); mc.bindChangeEvent('linkage1',function(){ var provinceId = $('#linkage1').val();
// 获取城市信息
$.getJSON("json/city.json",function(cities){
var optionTags = ""; $(cities[provinceId]).each(function(index,obj){
optionTags += "<option value=" + obj.id + ">" + obj.name + "</option>";
});
$('#linkage2').append(optionTags);
});
}); mc.bindChangeEvent('linkage2',function(){
var cityId = $('#linkage2').val();
// 获取区(县)信息
$.getJSON("json/area.json",function(areas){
var optionTags = "";
areas[cityId].forEach(function(obj){
optionTags += "<option value=" + obj.id + ">" + obj.name + "</option>";
});
$('#linkage3').append(optionTags);
});
}); });

  方法二:

$(function(){
var mc = new MultipleCascades();
mc.init({
'containerId':'selectContainer',
'selectNum':3,
'textDescraption':['省:','市:','区:']
}); // 2.获取省份信息
$.getJSON("json/province.json",function(provinces){
var optionTags = "";
$(provinces).each(function(index,obj){
optionTags += "<option value=" + obj.id + ">" + obj.name + "</option>";
});
$('#linkage1').append(optionTags);
}); // 绑定onchange事件
$('#linkage1').change(function(){
// 1.移除市和区的下拉选项
$('#linkage2 option:gt(0)').remove();
$('#linkage3 option:gt(0)').remove();
var provinceId = $(this).val();
if (!provinceId) return;
// 2.获取城市信息
$.getJSON("json/city.json",function(cities){
var optionTags = "";
$(cities[provinceId]).each(function(index,obj){
optionTags += "<option value=" + obj.id + ">" + obj.name + "</option>";
});
$('#linkage2').append(optionTags);
}); });
$('#linkage2').change(function(){
$('#linkage3 option:gt(0)').remove();
var cityId = $(this).val();
if (!cityId) return;
// 获取区(县)信息
$.getJSON("json/area.json",function(areas){
var optionTags = "";
areas[cityId].forEach(function(obj){
optionTags += "<option value=" + obj.id + ">" + obj.name + "</option>";
});
$('#linkage3').append(optionTags);
});
}); }); 

区别:在于方法一又对onchange事件进行了封装。

效果展示:

说明:

  1.使用我封装好的方法,具有良好的迁移性,操作简单,只需要在页面上放一个带有ID的div即可;

  2.可创建指定级别联动;

  3.select标签及前面的文字都设置了class,可自定义设置CSS样式;

  4.其他实现方式已经写好。

相关推荐:

   类似文章

 

js 多级联动(省、市、区)的更多相关文章

  1. html实现 省——市——区三级联动

    html实现  省——市——区三级联动 html中实现三级联动是一个不错的demo,博主在这里跟大家分享一下实现的过程,以及自己在过程中出现的一些问题,仅供参考. 首先我们将全国的省市区数据导入进来, ...

  2. 微信小程序-多级联动

    微信小程序中的多级联动 这里用到的案例是城市选择器 先上代码: .wxml <view class="{{boxHide}}"> <view>{{nian} ...

  3. PHP多级联动的学习(一)

    我尝试在ThinkCMF中实现多级联动,首先我开始看了dede的联动类别管理前后台的代码以及他的数据库,经过非常多次的尝试,我渐渐有了一点想法,并给予实施. 首先写出前台的界面.如图. 然后在数据库中 ...

  4. DropDownList的多级联动

    DropDownList的多级联动的问题最典型的案例就是实现省市级三级联动的案例,对这个问题的描述是当选中山东省之后,在选择市的下拉菜单时,市一栏只出现山东省下面的市.对于县也是同样的道理. 我也做的 ...

  5. jQuery cxSelect 多级联动下拉菜单

    随着电商热门,这种多层次的互动更充分地体现在下拉菜单,最明显的是多级联动地址下拉选择,因此,这里是一个简单的分享 jQuery cxSelect 多级联动下拉菜单 cxSelect 它是基于 jQue ...

  6. JavaScript 多级联动浮动(下拉)菜单 (第二版)

    JavaScript 多级联动浮动(下拉)菜单 (第二版)   上一个版本(第一版请看这里)基本实现了多级联动和浮动菜单的功能,但效果不是太好,使用麻烦还有些bug,实用性不高.这次除了修改已发现的问 ...

  7. 前端js 省市联动

    代码下载地址 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  8. JS省市区联动

    JS省市区使用文档 一:服务器返回JSON格式要求如下网址里面data的格式:(拿KISSY组件data格式来做的) http://gallery.kissyui.com/cityselector/d ...

  9. JS省市区联动效果

    省市区联动下拉效果在WEB中应用非常广泛,尤其在电商网站最为常见.一般使用Ajax实现无刷新下拉联动.利用jQuery,通过读取JSON数据,实现无刷新动态下拉省市二(三)级联动效果. 首先我们可以看 ...

随机推荐

  1. 记一次ms16-032成功提权win7/win12

    E:\Tools\提权大结合\ms16-032>whoami pc-20140503jfge\administrator 首先查看权限是administrator 随后溢出 可以看到是syste ...

  2. 【8.19校内测试】【背包】【卡特兰数】【数位dp】

    早上随便搞搞t1t3就开始划水了,t2一看就是组合数学看着肚子疼...结果t1t3都a了??感天动地. 从小到大排序,从前到后枚举i,表示i是整个背包中不选的物品中代价最小的那个,即i不选,1到i-1 ...

  3. 2349 Arctic Network(中文版)

    试题描述: 国防部希望通过无线网络连接几个北方前哨基地. 在建立网络时将使用两种不同的通信技术:每个前哨基站都将拥有无线电收发器,另外还有一些前哨卫星通道. 任何带卫星频道的两个前哨都可以通过卫星进行 ...

  4. [转]基础总结篇之一:Activity生命周期

      子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思 ...

  5. [译]Java 程序员应该了解的 10 个面向对象设计原则

    面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorator ...

  6. 求助下 Ubuntu 15.10(64 位)下安装 pyspider 下的问题 - V2EX

    https://www.v2ex.com/t/279405 求助下 Ubuntu 15.10(64 位)下安装 pyspider 下的问题 - V2EX pip 更新到最新 sudo apt inst ...

  7. 直接拿来用!最火的iOS开源项目(一~三)

    结束了GitHub平台上“最受欢迎的Android开源项目”系列盘点之后,我们正式迎来了“GitHub上最受欢迎的iOS开源项目”系列盘点.今天,我们将介绍20个在GitHub上非常受开发者欢迎的iO ...

  8. Tasker 正则表达式测试器

    http://tieba.baidu.com/p/3533498043 本次分享的是一个正则表达式测试工具,用来方便快捷的进行Tasker正则方面的测试,一些比较复杂的匹配需要进行多次尝试才可能正确匹 ...

  9. Apache服务器和tomcat服务器有什么区别?

    Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的 Web服务器运行.Apache是Web服务器而Tomcat是Java应用服务器. ...

  10. C++输出上三角/下三角/菱形/杨辉三角形

    1.输出上三角形 第一行1个星,第二行3个星,第三行5个星,第四行7个星,第五行9个星. 分析:三角形的形状由输出的空白和星组成,通过分析每一行输出几个空格,几个星,就可完成输出三角形的工作. #in ...