多个列表框联动,不算是啥大问题,但是却挺麻烦,那么怎么才能够尽量方便一点呢?网上搜了一下,没发现太好用的,于是就自己写了一个。基于jQuery,无限级联动,支持下拉列表框和列表框。

先说一下步骤和使用方法:

1、在页面里设置列表框

城市:<select name="c5118020" id="ctrl_001" >
<option value="-99999">请选择</option><option value="1">沈阳</option><option value="2">抚顺</option><option value="3">鞍山</option><option value="4">营口</option><option value="5">大连</option>
</select><br/>
区县:<select size="1" name="c5118030" id="ctrl_002">
<option value="1">请先选择城市</option>
</select><br/>
街道:<select id="ctrl_003" name="c5118040" >
<option value="1">请先选择区县</option>
</select><br/>
社区:<select id="ctrl_004" name="c5118050" >
<option value="1">请先选择街道</option>
</select>

排版布局可以随意设定,id、name、css等都没有任何限制。

2、引用js

<script language="javascript" type="text/javascript" src="nature.head.js"></script>
<script language="javascript" type="text/javascript" src="jquery-1.8.2.min.js"></script>
<script language="javascript" type="text/javascript" src="Nature.Control.Base.js"></script>
<script language="javascript" type="text/javascript" src="Nature.Control.Base.UnionList.js"></script>

3、设置联动列表框的属性和事件

var uLst;

       window.onload = function () {
//定义需要的属性
var lstEvent = {
lstObjects: [$("#ctrl_001"), $("#ctrl_002"), $("#ctrl_003"), $("#ctrl_004")], //联动列表的集合,数组形式
ajaxPara: [{}, {}, {}, {}], //访问ajax的参数,结构可以自行定义,联动列表框只负责传递
//列表框的change事件。
//selectValue:列表框选择的值,
//lst:下一个列表框的对象,
//ajaxPara:调用下一个列表框需要的参数
//callback:回调函数,触发列表框的change事件,也可以直接写lst.change();
lstChange: function (selectValue, lst, ajaxPara, callback) {
//alert(selectValue);
//alert(lst); /* 模拟操作。您可以根据自己的需求改成ajax的方式,ajaxPara:调用下一个列表框需要的参数
如果采用ajax的方式来获取记录集,那么请在数据请求完毕之后,并且绑定列表框之后再调用callback
*/
lst.append("<option value='" + selectValue + "_1'>" + selectValue + "_text1</option>");
lst.append("<option value='" + selectValue + "_2'>" + selectValue + "_text2</option>");
lst.append("<option value='" + selectValue + "_3'>" + selectValue + "_text3</option>");
lst.append("<option value='" + selectValue + "_4'>" + selectValue + "_text4</option>"); callback(lst); }
}; //实例基础控件
var baseCtrl = new Nature.Controls.BaseControl({});
//创建联动列表框
uLst = baseCtrl.UnionList(lstEvent); };

lstEvent 属性说明

lstObjects:数组形式,里面存放列表框,请注意先后顺序,第一级放在第一位,第二级放在第二位,以此类推。顺序不能弄错。

ajaxPara:大多数联动,都是用ajax的方式来获取选项,使用ajax就需要一些参数,那么可以把需要的参数放在这里,然后在change事件里,可以得到对应的列表框的选项需要的参数。

lstChange:任何一个列表框的选项发生变化,都会触发这个事件,在这里可以实现填充下一个列表框的选项。由于大部分获取选项都是使用ajax异步的方式,所以设置了一个回调函数,这样在ajax获取选项之后,可以通过callback的方式来回调,也就是触发下一个列表框的change事件。

=========================================

基本情况就是这样了。然后在说一下如何获取列表框的选项

获取列表框的选项(option、item)有很多很多种方法,记录集的格式也是千差万别,所以也没法集合到联动列表框内部。另外本着单一职责和低耦合的原则,还有更通用一点的需求,也是应该把获取列表框的选项的功能放在外部处理。

在页面里直接获取选项,可以用ajax,也可以用其他的方式。由于没有把这个功能放在内部实现,所以就做了一个很简单的演示,模拟一个假数据。根据上一个列表框的选择值,来设定下一个列表框的text。这样是想有一个比较明显的区分。

最后是在线演示

ps:

1、优缺点

优点是比较通用,能够方便一点点。缺点是,还是太麻烦。

做完了自后,有重新想了一遍,这么做比直接实现到底有啥区别呢?好像也没啥大的区别嘛,哈哈。怪不得网上没啥知名的联动列表框呢,原来这个东东比较鸡肋,哈哈。

2、有待完善的地方

其实联动列表框的难点不是如何联动,而是如何设置默认选项。比如在修改记录时,字段值是 沈阳市、和平区、某某街道、某某社区,那么就应该把列表框的默认选项给设置上。但是选项是动态生成的,而且还是ajax获取的,这个问题想了好几天,截止到现在才有了一个明确的思路。不知道您有没有什么好的办法。

纯js的N级联动列表框 —— 基于jQuery的更多相关文章

  1. 【分享】纯js的n级联动列表框 —— 基于jQuery,支持下拉列表框和列表框,最重要的是n级,当然还有更重要的

    多个列表框联动,不算是啥大问题,但是却挺麻烦,那么怎么才能够尽量方便一点呢?网上搜了一下,没发现太好用的,于是就自己写了一个.基于jQuery,无限级联动,支持下拉列表框和列表框. 先说一下步骤和使用 ...

  2. js实现城市二级联动列表

    这个是一个同事写的,我看着有用,就cv下来了. 程序功能主要逻辑是: 1.当一级标签市显示默认状态 '-请选择-'时,二级标签要隐藏 2.一级标签选中城市时,二级标签显示在页面,并列出响应市区 3.当 ...

  3. JS 省市两级联动(不带地区版本)

    基于网上找的一个版本改造,因为项目需求不需要地区只要省.市,所以做了改版,两个input上直接取出了数据 <html> <head> <script src=" ...

  4. JS省份联级下拉框

    <script type="text/javascript"> var china=new Object();china['北京市']=new Array('北京市区' ...

  5. div/dom元素拖拽缩放插件,纯js实现拖拽缩放,不依赖jQuery~

    产品需求,需要用到对div(dom)进行拖拽缩放操作,看到有好多插件,要么依赖jQuery,要么文件太大. 封装了一个插件,不压缩状态下5KB. html <!DOCTYPE html> ...

  6. JPasswordField密码框,JList列表框

    [JPasswordField密码框] //导入Java类 import javax.swing.*; import java.awt.*; import java.awt.event.ActionE ...

  7. JS 实现地区,省份,城市,县区4级联动

    刚学JS,实战一下,做一个省份信息4级联动. 但是网上查了都是3级的,没有4级,现在做一个的是带地区的4级联动,最简单的办法是修改别人的代码,最开始找到的事类似于下边这个的: 省市县关联菜单 < ...

  8. [原创]纯JS实现网页中多选复选框checkbox和单选radio的美化效果

    图片素材: 最终效果图: <html><title> 纯JS实现网页中多选复选框checkbox和单选radio的美化效果</title><head>& ...

  9. Combobox下拉框两级联动

    下拉框的两级联动是我们开发中经常遇到一种情况.比如一个学生管理系统中,根据年级.科目及姓名查询学生考试成绩,年级和科目都是硬盘中的有限数据(数据库)而学生则可以有用户手动指定,这时在数据库中有年级和科 ...

随机推荐

  1. [io benchmark]常用磁盘基准/压力测试工具

    Unix Disk I/O Benchmarks fio - NEW! fio is an I/O tool meant to be used both for benchmark and stres ...

  2. 关于WEB-INF目录不提供外部访问及JSP引用 js,css 文件路径问题

    在 web 项目开发过程中,我们常常使用到 JSP,以及对静态资源,js,css 等引用,但是我们应该把这些资源文件放在哪个目录下面咧,怎么引用. 当然如果是前后端分离的项目倒不用考虑这些. WEB- ...

  3. Bootstrap 文件上传插件 FileInput的使用问题

    : 在使用bootstrap的文件上传插件fileinput http://plugins.krajee.com/file-input的预览功能时,删除预览图片在 bootstrap 模态框中没有用, ...

  4. 数学&动态规划:期望DP

    BZOJ3036 给定一张有向无环图,起点为1,终点为N,每个点i有ki条出边,从每个点走其中一条出边的概率是1/ki,求从1到N的期望步数 我们注意到一点,走每条边都是等概率的,那么就相当于 给定一 ...

  5. 数学:随机素数测试(Miller_Rabin算法)和求整数素因子(Pollard_rho算法)

    POJ1811 给一个大数,判断是否是素数,如果不是素数,打印出它的最小质因数 随机素数测试(Miller_Rabin算法) 求整数素因子(Pollard_rho算法) 科技题 #include< ...

  6. sql 流水号获取

    经常用到产生订单号等流水单号的场景,sqlserver实现流水号,如下: 表tb_b_Seq(流水号表): CREATE TABLE tb_b_Seq( Year int ,--年份 Month in ...

  7. cmd下常用命令汇总

    1.获得文件夹内所有文件的文件名列表 dir *.png /b>list.txt 其中: (1)*.png表示筛选后缀为.png的文件 (2)/b为输出的模式.如下: 引用 /b 只有文件名  ...

  8. VS调试程序快捷键和系统快捷键

    调试程序快捷键 编译程序:F7 运行程序:ctrl + F5 打断点:F9 运行到断点位置:F5 单步执行:F10 单步进入函数:F11 结束调试:shift+F5 注释代码:ctrl+k,ctrl+ ...

  9. SQL Server 高级SQL

    查询view 的列和列数据类型 SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'vi ...

  10. c++树,知道前序和中序求后序遍历

    经常有面试题就是知道一棵树的前序遍历和中序遍历让你写出后序遍历,这个慢慢画是能画出来的,但是要很快的弄出来还是要懂原理. 首先说一下三种遍历:所谓的前序后序和中序都是遍历时遍历根节点的顺序.子树的话依 ...