首页 / 脚本样式 / JavaScript / JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
html代码 复制代码 代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>试试</title> </head> <script type="text/javascript"> var data = { "1" : "a001", "2" : "a002", "3" : "a003", "4" : "a004", "5" : "a005", "6" : "a006" }; var data2 = { "1" : { "101" : "a101", "102" : "a102", "103" : "a103", "104" : "a104" }, "2" : { "201" : "a201", "202" : "a202", "203" : "a203", "204" : "a204" }, "3" : { "301" : "a301", "302" : "a302", "303" : "a303", "304" : "a304" }, "4" : { "401" : "a401", "402" : "a402", "403" : "a403", "404" : "a404" }, "5" : { "501" : "a501", "502" : "a502", "503" : "a503", "504" : "a504" }, "6" : { "601" : "a601", "602" : "a602", "603" : "a603", "604" : "a604" }, "101" : { "10101" : "a10101", "10102" : "a10102", "10103" : "a10103", "10104" : "a10104" }, "102" : { "10201" : "a10201", "10202" : "a10202", "10203" : "a10203", "10204" : "a10204" }, "103" : { "10301" : "a10301", "10302" : "a10302", "10303" : "a10303", "10304" : "a10304" }, "104" : { "10401" : "a10401", "10402" : "a10402", "10403" : "a10403", "10404" : "a10404" }, "201" : { "20101" : "a20101", "20102" : "a20102", "20103" : "a20103", "20104" : "a20104" }, "202" : { "20201" : "a20201", "20202" : "a20202", "20203" : "a20203", "20204" : "a20204" }, "203" : { "20301" : "a20301", "20302" : "a20302", "20303" : "a20303", "20304" : "a20304" }, "204" : { "20401" : "a20401", "20402" : "a20402", "20403" : "a20403", "20404" : "a20404" }, "301" : { "30101" : "a30101", "30102" : "a30102", "30103" : "a30103", "30104" : "a30104" }, "302" : { "30201" : "a30201", "30202" : "a30202", "30203" : "a30203", "30204" : "a30204" }, "303" : { "30301" : "a30301", "30302" : "a30302", "30303" : "a30303", "30304" : "a30304" }, "304" : { "30401" : "a30401", "30402" : "a30402", "30403" : "a30403", "30404" : "a30404" }, "401" : { "40101" : "a40101", "40102" : "a40102", "40103" : "a40103", "40104" : "a40104" }, "402" : { "40201" : "a40201", "40202" : "a40202", "40203" : "a40203", "40204" : "a40204" }, "403" : { "40301" : "a40301", "40302" : "a40302", "40303" : "a40303", "40304" : "a40304" }, "404" : { "40401" : "a40401", "40402" : "a40402", "40403" : "a40403", "40404" : "a40404" }, "501" : { "50101" : "a50101", "50102" : "a50102", "50103" : "a50103", "50104" : "a50104" }, "502" : { "50201" : "a50201", "50202" : "a50202", "50203" : "a50203", "50204" : "a50204" }, "503" : { "50301" : "a50301", "50302" : "a50302", "50303" : "a50303", "50304" : "a50304" }, "504" : { "50401" : "a50401", "50402" : "a50402", "50403" : "a50403", "50404" : "a50404" }, "601" : { "60101" : "a60101", "60102" : "a60102", "60103" : "a60103", "60104" : "a60104" }, "602" : { "60201" : "a60201", "60202" : "a60202", "60203" : "a60203", "60204" : "a60204" }, "603" : { "60301" : "a60301", "60302" : "a60302", "60303" : "a60303", "60304" : "a60304" }, "604" : { "60401" : "a60401", "60402" : "a60402", "60403" : "a60403", "60404" : "a60404" } }; window.$ = function(id) { if(typeof id == "string") { return document.getElementById(id); } return id; } /** * 事件处理工具类 * * @author bao110908 */ var Event = function(){} Event = { /** * 为 element 使用 handler 处理程序添加至 event 事件 * 兼容 IE 及 Firefox 等浏览器 * * 例如为 botton 对象添加 onclick 事件,使用 clickEvent * 方法作为处理程序: * Event.addEvent(botton, "click", clickEvent); * * @param element 需要添加事件的对象(Object) * @param event 需要添加的事件名称(String),不加“on” * @param handler 需要添加的方法引用(Function) */ addEvent : function(element, event, handler) { if(element.attachEvent) { element.attachEvent("on" + event, handler); } else if (element.addEventListener) { element.addEventListener(event, handler, false); } else { element["on" + event] = handler; } }, /** * 添加事件处理程序时,只能添加一个方法的引用,并不能给 * 方法加上参数。比如定义了 clickEvent(str) 这个方法,现 * 在要将其作为 obj 的 onclick 的事件处理程序,就可以用: * obj.onclick = Event.getFuntion(null, clickEvent, str); */ getFunction : function(obj, fun) { var args = []; obj = obj || window; for(var i = 2; i < arguments.length; i++) { args.push(arguments[i]); } return function() { fun.apply(obj, args); }; } } /** * 联动处理类 * * @param first 第一个 select 的 ID * @param second 第二个 select 的 ID * @param dataSet 第二个 select 的数据 * * @author bao110908 */ var Linkage = function(first, second) { this.first = $(first); this.second = $(second); } /** * 初始化第一个 select 的数据 */ Linkage.initFirst = function(first, dataSet) { var base = $(first); base.options.length = 1; for(var k in dataSet) { var opt = new Option(dataSet[k], k); base.options[base.options.length] = opt; } } Linkage.prototype = { // 初始化 init : function() { this.addOnChange(); }, // 为第一个 select 添加 onchange 事件 addOnChange : function() { Event.addEvent(this.first, "change", Event.getFunction(this, this._onChangeEvent)); }, // onchange 事件处理 _onChangeEvent : function() { this._defaultSelect(); var data = this._getData(this.first.value); if(!data) { return; } this.second.options.length = 1; for(var k in data) { var opt = new Option(data[k], k); this.second.options[this.second.options.length] = opt; } }, // 获取数据,如果采用 Ajax 方式,需要进行更改 // Ajax 应返回 { "101" : {"101" : "a101", "102", "a102" }} 这样的数据格式 // 然后再使用 eval("(" + ajaxData + ")"); 转为 JSON 对象 _getData : function(value) { return data2[value]; }, // 重新选择时的处理 _defaultSelect : function() { this.second.selectedIndex = 0; this.second.options.length = 1; if(this.second.fireEvent) { // IE this.second.fireEvent("onchange"); } else { // DOM 2 var event = document.createEvent("HTMLEvents"); event.initEvent("change", false, true); this.second.dispatchEvent(event); } } } window.onload = function() { Linkage.initFirst("base1", data); var one = new Linkage("base1", "base2"); one.init(); var two = new Linkage("base2", "base3"); two.init(); } </script> <style type="text/css"> * { font-size: 12px; font-family: "courier new"; } select { width: 120px; } </style> <body> 一级:<select name="base1" id="base1"><option value="0">-- 请选择 --</option></select> 二级:<select name="base2" id="base2"><option value="0">-- 请选择 --</option></select> 三级:<select name="base3" id="base3"><option value="0">-- 请选择 --</option></select> </body> </html> Js代码 复制代码 代码如下: var one = new Linkage("base1", "base2", data2); one.init(); var two = new Linkage("base2", "base3", data3); two.init(); //每增加一级联动,就要 new 一下就可以了
收藏该网址