写了ajax实现级联下拉框,考虑常用,并且级联个数随不同业务个数不同,于是就整理了一下,实现了 ajax + N级联动 下拉框的效果

效果图

HTML 代码

    <h2> 省级联动</h2>
<div class="city" >
<select id="SelProvince" class="select"></select>
<select id="SelCity" class="select"></select>
<select id="SelArea" class="select"></select>
<select id="SelXian" class="select"></select>
</div> <h2> 市区联动</h2>
<div class="city" >
<select id="Select1" class="select"></select>
<select id="Select2" class="select"></select>
<select id="Select3" class="select"></select>
</div>

js 绑定

 引入jQuery 和 jquery.cascadeselect.js 两个文件(下面会贴出文件下载地址)
 <script type="text/javascript">
$(function () { $.fn.CascadeSelect({
url: '/CascadeSelect/CascadeSelect.ashx', //返回Json数据的一般处理文件
idKey: 'Id', // 绑定下拉框实际值的字段
nameKey: 'Name', // 绑定下拉框显示值的字段
casTopId: 0, // 顶级节点ParentId
casCount: 4, // 级联个数
casObjId: ['SelProvince', 'SelCity', 'SelArea', 'SelXian'], // 级联下拉框id
casDefVal: ['全国', 5, '益阳', 22], // 级联默认值(Id,Name都可以)
}); $.fn.CascadeSelect({
url: '/CascadeSelect/CascadeSelect.ashx', //返回Json数据的一般处理文件
idKey: 'Id', // 绑定下拉框实际值的字段
nameKey: 'Name', // 绑定下拉框显示值的字段
casTopId: 1, // 顶级节点ParentId
casCount: 3, // 级联个数
casObjId: ['Select1', 'Select2', 'Select3'], // 级联下拉框id
casDefVal: [5, '益阳', 22], // 级联默认值(Id,Name都可以)
});
});
</script>

jquery.cascadeselect.js 源码:

$(function ($) {
cas_settings = {};
$.fn.CascadeSelect = function (options) { var cas_setId = options['casObjId'][0];
cas_settings[cas_setId] =
{
url: 'xxoo.ashx', //返回Json数据的一般处理文件
idKey: 'id',
nameKey: 'name',
casTopId: 0 , // 顶级节点ParentId
casCount: 3, // 级联个数
casObjId: [], // 级联下拉框id
casDefVal: [], // 级联默认值
};
$.extend(cas_settings[cas_setId], options);
// ----------------->
} // 加载级联数据
function LoadCasData(curLevel, cas_setId, ParentID) {
if (curLevel > cas_settings[cas_setId].casCount) return; var cid = cas_settings[cas_setId].casObjId[curLevel - 1]; // 下拉框id
var cdefval = cas_settings[cas_setId].casDefVal[curLevel - 1]; //默认值
var idKey = cas_settings[cas_setId].idKey;
var nameKey = cas_settings[cas_setId].nameKey;
var CPID = 0; //市级所需要的父级ID var curObj = $('#' + cid); // 当前下拉框
curObj.empty(); //清空下拉框
if (ParentID == undefined) {
LoadCasData(curLevel + 1, cas_setId);
return;
} $.ajax({
url: cas_settings[cas_setId].url, type: 'post', data: { Level: curLevel, ParentID: ParentID }, dataType: 'json', async: false
, success: function (data) {
if (data.length == 0) {
LoadCasData(curLevel + 1, cas_setId); // 加载子项数据
return;
} CPID = data[0][idKey]; //如果没有传入参数,系统默认父级第一个ID
for (var i = 0; i < data.length; i++) {
if (data[i][idKey] == cdefval || data[i][nameKey] == cdefval ) {
CPID = data[i][idKey]; // 选中默认值
curObj.append(" <option value='" + data[i][idKey] + "' selected='selected'>" + data[i][nameKey] + "</option>");
} else {
curObj.append(" <option value='" + data[i][idKey] + "'>" + data[i][nameKey] + "</option>");
}
} LoadCasData(curLevel + 1, cas_setId, CPID); // 加载子项数据
return;
}
, error: function () {
console.log('加载数据出错!');
}
}); } // 设置下拉框级别
function SetCasLevel(cas_setId) {
for (var i = 0; i < cas_settings[cas_setId].casCount; i++) {
var cid = cas_settings[cas_setId].casObjId[i]; // 下拉框id
$('#' + cid).data('level', i + 1); // 当前下拉框级别
$('#' + cid).data('setid', cas_setId); // 配置信息Id //下拉框改变
$('#' + cid).change(function () {
var CPID = $(this).val();
LoadCasData($(this).data('level') + 1, $(this).data('setid'),CPID);
});
}
} // 页面加载
$(function () {
for (var cas_setId in cas_settings) {
console.log(cas_setId);
SetCasLevel(cas_setId);
LoadCasData(1, cas_setId, cas_settings[cas_setId].casTopId);
}
}); });

往后台传递的参数:

Level 级联级别 1开始
ParentID 父级ID

后台页面两种情况:

1、省市区是一个表(表结构是Id,Name,ParentId) 自联接查询的话,后台页面根据ParentId查询数据即可
2、省市区在不同的表,可一个根据 Level 级联级别分别查询数据,但是省市区返回数据实体得一样,也就是列名得一致
     返回数据的格式:[{"Id":value,"Name":value},{"Id":value,"Name":value}] 
     绑定的时候可以设置这两个字段值:(idKey: 'Id', // 绑定下拉框实际值的字段 nameKey: 'Name', // 绑定下拉框显示值的字段)

(js文件,源码)案例下载:http://download.csdn.net/detail/qq_21533697/8968013
   交流群 : 84479667

----------------end

ajax 多级联动 下拉框 Demo的更多相关文章

  1. JQuery Easyui/TopJUI 创建多级联动下拉框(纯HTML实现!!!)

    JQuery Easyui/TopJUI 创建多级联动下拉框(纯HTML实现!!!) 效果展示: 代码如下: <form data-toggle="topjui-form"& ...

  2. bootstrap 多级联动下拉框

    <!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  3. JQ与AJAX 省市区三级联动下拉框

    用于初学者学习基本的联动下拉框,废话不多说,见代码 首先看控制器里的3个下拉框对应代码: public ActionResult GetProvinceList() { ProvinceReposit ...

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

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

  5. Android实现三级联动下拉框 下拉列表spinner

    Android实现(省.市.县)三级联动下拉框 下拉列表spinner 转载请注明出处: http://www.goteny.com/articles/2013/11/46.html http://w ...

  6. jquery+html三级联动下拉框

    jquery+html三级联动下拉框及详情页面加载时的select初始化问题   html写的三个下拉框,如下: <select name="ddlQYWZYJ" id=&q ...

  7. 项目总结01:JSP mysql SpringMvc下中国省市县三级联动下拉框

    JSP mysql SpringMvc下中国省市县三级联动下拉框 关键词 JSP  mysql数据库  SpringMvc  ajax   Controller层  Service层  中国地区  省 ...

  8. Vue.js组件之联动下拉框

    Html代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  9. SharePoint 2013 使用查阅项实现联动下拉框

    SharePoint列表使用中,经常会用到下拉框,而有些特殊的需求,会用到联动的下拉框,在SharePoint中默认没有这样的字段,所以如果实现,我们需要自己想办法. 这里,我们介绍如何使用JQuer ...

随机推荐

  1. Node学习笔记(二):事件驱动

    接触Node,提得最多的可能就是回调,异步非阻塞处理,思前想后,JavaScript从前端语言过渡到服务器端,最大的劣势可能就是线程,当然这方面的不足现在也被慢慢弥补起来了(很多第三方的npm包可供下 ...

  2. C#开发微信门户及应用(2)--微信消息的处理和应答

    微信应用如火如荼,很多公司都希望搭上信息快车,这个是一个商机,也是一个技术的方向,因此,有空研究下.学习下微信的相关开发,也就成为计划的安排事情之一了.本系列文章希望从一个循序渐进的角度上,全面介绍微 ...

  3. HTML课上小结

    HTML翻译为超文本标记语言<标签名>内容</标签名>静态网页动态网页的区别是看是否从数据中提取数据一般网页由几部分组分组成<html>开始标签 <head& ...

  4. Java之继承、抽象类、接口篇

    一.继承(extends) 什么是继承? 继承是对现实生活中的"分类"概念的一种模拟. 狮子拥有动物的一切基本特性,但同时又拥有自己的独特的特性,这就是"继承" ...

  5. Java - 网络编程

    Java的网络编程学习,关于计算机基础的学习参考:计算机网络基础学习 - sqh.     参考:  

  6. jdk源码分析红黑树——插入篇

    红黑树是自平衡的排序树,自平衡的优点是减少遍历的节点,所以效率会高.如果是非平衡的二叉树,当顺序或逆序插入的时候,查找动作很可能会遍历n个节点 红黑树的规则很容易理解,但是维护这个规则难. 一.规则 ...

  7. LightGallery.js – 功能齐全的 Javascript Lightbox

    Lightgallery是一个轻量级的模块化.响应式的灯箱画廊,它允许您创建美丽的图像和视频画廊.借助缩略图插件的帮助,Lightgallery 允许您创建缩略图画廊.它支持触摸屏设备上滑动导航以及桌 ...

  8. Java中使用IO流实现大文件的分裂与合并

    文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时候就可以把这个文件切割成3个1G的文件 ,分 ...

  9. iOS角度与弧度转换

    在iOS中图片的旋转单位为弧度而不是角度,所以经常会在两者之间进行转换 弧度转角度 #define RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / ...

  10. DBMS_NETWORK_ACL_ADMIN

    DBMS_NETWORK_ACL_ADMIN学习 转载 http://blog.sina.com.cn/s/blog_4f925fc30102e2se.html 标签: oracle it 分类: 数 ...