JS写的多级联select,如何取值
var $ = function (id) {
return "string" == typeof id ? document.getElementById(id) : id;
};
function addEventHandler(oTarget, sEventType, fnHandler) {
if (oTarget.addEventListener) {
oTarget.addEventListener(sEventType, fnHandler, false);
} else if (oTarget.attachEvent) {
oTarget.attachEvent("on" + sEventType, fnHandler);
} else {
oTarget["on" + sEventType] = fnHandler;
}
};
function Each(arrList, fun){
for (var i = 0, len = arrList.length; i < len; i++) { fun(arrList[i], i); }
};
function GetOption(val, txt) {
var op = document.createElement("OPTION");
op.value = val; op.innerHTML = txt;
return op;
};
var Class = {
create: function() {
return function() {
this.initialize.apply(this, arguments);
}
}
}
Object.extend = function(destination, source) {
for (var property in source) {
destination[property] = source[property];
}
return destination;
}
var CascadeSelect = Class.create();
CascadeSelect.prototype = {
//select集合,菜单对象
initialize: function(arrSelects, arrMenu, options) {
if(arrSelects.length <= 0 || arrMenu.lenght <= 0) return;//菜单对象
var oThis = this;
this.Selects = [];//select集合
this.Menu = arrMenu;//菜单对象
this.SetOptions(options);
this.Default = this.options.Default || [];
this.ShowEmpty = !!this.options.ShowEmpty;
this.EmptyText = this.options.EmptyText.toString();
//设置Selects集合和change事件
Each(arrSelects, function(o, i){
addEventHandler((oThis.Selects[i] = $(o)), "change", function(){ oThis.Set(i); });
});
this.ReSet();
},
//设置默认属性
SetOptions: function(options) {
this.options = {//默认值
Default: [],//默认值(按顺序)
ShowEmpty: false,//是否显示空值(位于第一个)
EmptyText: "请选择"//空值显示文本(ShowEmpty为true时有效)
};
Object.extend(this.options, options || {});
},
//初始化select
ReSet: function() {
this.SetSelect(this.Selects[0], this.Menu, this.Default.shift());
this.Set(0);
},
//全部select设置
Set: function(index) {
var menu = this.Menu
//第一个select不需要处理所以从1开始
for(var i=1, len = this.Selects.length; i < len; i++){
if(menu.length > 0){
//获取菜单
var value = this.Selects[i-1].value;
if(value!=""){
Each(menu, function(o){ if(o.val == value){ menu = o.menu || []; } });
} else { menu = []; }
//设置菜单
if(i > index){ this.SetSelect(this.Selects[i], menu, this.Default.shift()); }
} else {
//没有数据
this.SetSelect(this.Selects[i], [], "");
}
}
//清空默认值
this.Default.length = 0;
},
//select设置
SetSelect: function(oSel, menu, value) {
oSel.options.length = 0; oSel.disabled = false;
if(this.ShowEmpty){ oSel.appendChild(GetOption("", this.EmptyText)); }
if(menu.length <= 0){ oSel.disabled = true; return; }
Each(menu, function(o){
var op = GetOption(o.val, o.txt ? o.txt : o.val); op.selected = (value == op.value);
oSel.appendChild(op);
});
},
//添加菜单
Add: function(menu) {
this.Menu[this.Menu.length] = menu;
this.ReSet();
},
//删除菜单
Delete: function(index) {
if(index < 0 || index >= this.Menu.length) return;
for(var i = index, len = this.Menu.length - 1; i < len; i++){ this.Menu[i] = this.Menu[i + 1]; }
this.Menu.pop()
this.ReSet();
}
};
window.onload=function(){
var menu = [
{'val': '广西自治区', 'menu': [
{'val': '梧州市', 'menu': [
{'val': '万秀区','menu':[
{'val':'选择街道'},
{'val':'富民街道','menu':[
{'val':'选择社区'},
{'val':'富康社区'},
{'val':'富安社区'}]},
{'val':'东兴街道','menu':[
{'val':'选择社区'},
{'val':'香樟社区'},
{'val':'月桂社区'}]},
{'val':'角嘴街道','menu':[
{'val':'选择社区'},
{'val':'蓝天社区'},
{'val':'塘源社区'}]},
{'val':'城北街道','menu':[
{'val':'选择社区'},
{'val':'华机社区'},
{'val':'桂北社区'}]},
{'val':'城中街道','menu':[
{'val':'选择社区'},
{'val':'冰泉社区'},
{'val':'四坊社区'}]}]}
]}
]}
];
var sel=["sel1", "sel2", "sel3", "sel4", "sel5"];
var val=["广西自治区"];
var cs = new CascadeSelect(sel, menu, { Default: val });
};
JS写的多级联select,如何取值的更多相关文章
- 在jsp的js和css里面使用EL表达式取值|style里面用$取值
众所周知,如果直接在jsp的js或者css语句块里面写${***}取值的话,程序会不识别这玩意,但是,我们有时候确实需要动态取值,比如,js为了获得对象的某一个值,不方便用js的getElementB ...
- js动态参数作为Object的属性取值
js动态参数作为Object的属性取值var myObj = {"a":1,"b":2};var a = 'a';myObj[a] 就可以获取到 属性a的值了
- Js操作Select大全(取值、设置选中)
Js操作Select是很常见的,也是比较实用的. jquery操作select(取值,设置选中) 每一次操作select的时候,总是要出来翻一下资料,不如自己总结一下,以后就翻这里了. 比如<s ...
- Js操作Select大全(取值、设置选中等等)
jquery操作select(取值,设置选中) 每一次操作select的时候,总是要出来翻一下资料,不如自己总结一下,以后就翻这里了. 比如<select class="selecto ...
- 独立的js文件中不能使用EL表达式取值
在独立的js文件中写了一个EL表达式取值,发现没有取到值,原因在于不能在独立的js文件中使用EL表达式,可以在jsp页面定义全局变量,然后在js文件中引用
- 【js jQuery】map集合 循环迭代取值---以及 map、json对象、list、array循环迭代的方法和区别
后台给前台传来一个map @ResponseBody @RequestMapping(value = "getSys") public Map<Long,String> ...
- 关于select的取值
这篇博客,主要是记录我我所犯的错误,或者自己的写法不规范导致了错误,大家可以引以引以为鉴. 我要获取select当前的值,在IE9上我可以直接写document.getElementById(&quo ...
- js 使用ES6 实现从json中取值并返回新的数组或者字符串
1.获取的json数据是这样的: data:[ { 'Id': '1', 'Phone': '123456', 'Name': '张三', }, { 'Id': '2', 'Phone': '7894 ...
- 转:javascript 中select的取值
javascript获取select的值全解 获取显示的汉字 document.getElementById("bigclass").options[window.document ...
随机推荐
- jquery获取复选框的值
勾选checkbox,并把勾选的值显示在某个div中 <!DOCTYPE html > <html> <head> <meta charset="U ...
- 精通javascript(看书笔记)
变量的类型检查 //检测类型 var str = "Hello World"; if (typeof str=="string") {//使用typeof来判断 ...
- JavaWeb学习总结-09 JDBC 学习和使用
一 JDBC相关概念介绍 1.1 数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...
- maven工程直接部署在tomcat上
http://www.cnblogs.com/guodefu909/p/4874549.html (现在用的是第三点.)
- f.lux for Linux安装
1.安装f.luxsudo add-apt-repository ppa:kilian/f.lux sudo apt-get update sudo apt-get install fluxgui 2 ...
- codeforces 719A Vitya in the Countryside(序列判断趋势)
题目链接:http://codeforces.com/problemset/problem/719/A 题目大意: 题目给出了一个序列趋势 0 .1 .2 .3 ---14 .15 .14 ----3 ...
- mysql的Replication机制
mysql的Replication机制 参考文档:http://www.doc88.com/p-186638485596.html Mysql的 Replication 是一个异步的复制过程. 从上图 ...
- CO-类的本质、description方法
类的本质 1. 类也是个对象 其实类也是一个对象,是Class类型的对象,简称“类对象” Class类型的定义 typedef struct objc_class *Class; 类名就代表着类对象 ...
- Python开发【第十五篇】:Web框架之Tornado
概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...
- nginx下面server配置
haomeiv配置 log_format www.haomeiv.com '$remote_addr - $remote_user [$time_local] "$request" ...