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 ...
随机推荐
- linux学习基础6之sed用法详解
1 sed 又称为流编辑器,它逐行将文本文件中的行读取到模式空间中间去,将符合编辑条件的行进行编辑后输出到显示器上来.默认sed不编辑原文件只处理模式空间中的内容. 2 sed用法 sed [opti ...
- HTTP,TCP/IP协议
本文转自cnblogs:http://www.cnblogs.com/xhwy/archive/2012/03/03/2378293.html 一.概述 1.1 TCP HTTP UDP: 都 ...
- Python 数据处理----对定长数据的处理
场景: 有时候我们对大量数据进行处理,对性能要求很高,而且数据都是定长的,比如对移动信息登记表进行处理:名字 身份证信息 手机号码 这些都是定长的,今天小花来教大家如何对此类数据进行处理. 步骤一: ...
- ASP------<input type="file"/>上传文件
界面代码(注意:runat="Server"和input file中name一定要有) <html xmlns="http://www.w3.org/1999/xh ...
- 三大WEB服务器对比分析(apache ,lighttpd,nginx)
一.软件介绍(apache lighttpd nginx) 1. lighttpd Lighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点.lighttpd是众多 ...
- Oralce配置正确,报监听错误或无法识别描述中的服务
出差客户现场,修改过网络配置,回来后本地虚拟机的Oracle数据库就不能登陆了 报监听错误,在服务器中使用Net Configration Assistant删除以前的,重新配置新的,还是不行,重启系 ...
- JavaWeb学习笔记——Tomcat配置
使用的Tomcat版本是apache-tomcat-6.0.20 详细的环境变量配置参考<windows 7系统安装与配置Tomcat服务器环境> 网址为http://jingyan.ba ...
- JStorm集群的安装和使用
0 JStorm概述 JStorm是一个分布式的实时计算引擎.从应用的角度,JStorm应用是一种遵守某种编程规范的分布式应用:从系统角度, JStorm是一套类似MapReduce的调度系统: 从数 ...
- Embedding Scripts
Mono http://www.mono-project.com/docs/advanced/embedding/ http://www.mono-project.com/docs/advanced/ ...
- Visual Studio 2012优化
http://msdn.microsoft.com/en-us/library/ms182372.aspx