javascript级联插件
来源:互联网 发布:什么测温软件准确 编辑:程序博客网 时间:2024/05/20 00:17
(function(){/** 获取对象 */var $ = function(id){return typeof id == "string" ? document.getElementById(id):id;};/** 绑定事件流 */var bind = function(obj, eventName, funcionName){if(obj.addEventListener){obj.addEventListener(eventName, funcionName,false); }else if(obj.attachEvent) {obj.attachEvent("on" + eventName, funcionName); }else{obj["on" + eventName] = funcionName; }};var Cascading = function(ids){/** 存放级联id,数据类型为数组(字符串或者select对象),前一个为后一个的父节点 */for(var i=0,len=ids.length;i<len;i++){var select = $(ids[i]);Array.prototype.push.call(this, select);/** 设置初始下标为0 */this.indexes.push(0);/** 追加事件 */bind(select, "change", this._change(select, i));}};Cascading.prototype = {/** 级联深度 */length:0,/** 级联选择下标 */indexes:[],/** 默认--- 请选择 ---为首项占位符 */_defaultSpace:"--- \u8bf7\u9009\u62e9 ---",/** 级联数据存放 */_buffer:null,_opt:function(name, code){return new Option(name, code);},_change:function(select, index){/** 延长自身作用域 */var tmp = this;return function(){tmp.indexes[index] = select.selectedIndex;/** 超过级联深度 */if(index>=tmp.length-1) return;var data = tmp._buffer;/** 查找需要刷入的数据 */for(var i=0;i<=index;i++){var idx = tmp.indexes[i];/** 去除请选择的级联 */if(idx==0) {data = null;//清除break;}data = data[idx-1].children;if(!data) break;}/** 刷新下一个级联 */tmp._flush(index+1, data);/** 清除后续级联值 */tmp._reset(index+2);}},setData:function(jsonArray){/** * 数据格式为jsonArray,支持多级级联,以省市县为例, * 示例:[ *{"code":"01","name":"北京","children":[{"code":"0001","name":"北京市","children":[{"code":"0000001","name":"朝阳"},{"code":"0000002","name":"海淀"},{"code":"0000003","name":"西城"}]}]}, * {"code":"02","name":"四川","children":[{"code":"0002","name":"成都市","children":[{"code":"0002001","name":"金牛"},{"code":"0002002","name":"成华"},{"code":"0002003","name":"青阳"}]}, * {"code":"0003","name":"乐山市","children":[{"code":"0003001","name":"市中区"},{"code":"0003002","name":"五通桥"},{"code":"0003003","name":"测试区"}]}]} * ]*/this._buffer = jsonArray;return this;},_setRoot:function(){/** 最大父节点的初始化 */var root = this[0];/** 填充数据 */this._fillData(root, this._buffer);},_fillData:function(select, data){/** 填充级联数据 */var opts = select.options;/** 设置占位选项 */opts[0] = this._opt(this._defaultSpace, "-1");opts[0].selected = true;/** 无值则不填充相应数据 */if(!data) return;for(var i=0,len=data.length;i<len;i++){opts[opts.length] = this._opt(data[i].name, data[i].code);}},_flush:function(index, data){var s = this[index];/** 清除原有数据 */s.innerHTML = "";this._fillData(s, data);},_reset:function(index){/** 重置后续级联数据 */for(;index<this.length;index++){this[index].innerHTML = "";var opts = this[index].options;opts[0] = this._opt(this._defaultSpace, "-1");}},setSpace:function(space){this._defaultSpace = space;return this;},init:function(){/** 初始化根节点 */this._setRoot();/** 重置后续节点 */this._reset(1);}};/** 暴露调用 */window.CCD = function(ids){if ( ids && ids instanceof Array && ids.length>=2 ){return new Cascading(ids);}};})()
点击此处下载demo
0 0
- javascript级联插件
- jquery省市级联插件
- JavaScript 三级级联菜单
- 省市级联菜单javascript
- javascript实现级联菜单
- Javascript级联操作代码
- javascript实现级联菜单
- JavaScript【省市级联】
- javascript实现【省市级联】
- javascript省市级联方式
- JavaScript之省市级联
- javascript无限级联动菜单
- javaScript实现三级菜单级联
- JavaScript实现城市级联操作
- javascript实现省市级联效果
- javascript实现无限级联动
- JavaScript - 省市级联效果实例
- JavaScript实现级联下拉框
- UDID替代方案
- Maven入门(含实例教程)
- LeetCode 24. Swap Nodes in Pairs
- 函数式编程入门思想分享
- Javascript学习之路 —— 函数节流与函数去抖
- javascript级联插件
- 第六周项目三IP地址类
- python学习1
- XStream 解析xml 转 javaBean 问题
- 使用nexus搭建Maven私服
- C语言cgi编程入门
- Internet命名规则和地址划分约定
- 自定义View之 onMeasure() view的高度自适应wrap_content view的测量
- MFC对话框最小化到托盘编程实现步骤