转:适有修改并调试OK

var Sys = (function (ua) {
var s = {};
s.IE = ua.match(/msie ([\d.]+)/) ? true : false;
s.Firefox = ua.match(/firefox\/([\d.]+)/) ? true : false;
s.Chrome = ua.match(/chrome\/([\d.]+)/) ? true : false;
s.IE6 = (s.IE && ([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 6)) ? true : false;
s.IE7 = (s.IE && ([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 7)) ? true : false;
s.IE8 = (s.IE && ([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 8)) ? true : false;
return s;
})(navigator.userAgent.toLowerCase());
Sys.IE6 && document.execCommand("BackgroundImageCache", false, true);
function sID(Id) {
return document.getElementById(Id);
};
function sName(p, e) {
return p.getElementsByTagName(e);
};
function addListener(element, e, fn) {
element.addEventListener ? element.addEventListener(e, fn, false) : element.attachEvent("on" + e, fn);
};
function removeListener(element, e, fn) {
element.removeEventListener ? element.removeEventListener(e, fn, false) : element.detachEvent("on" + e, fn);
};
var Bind = function (object, fun) {
var args = Array.prototype.slice.call(arguments).slice(2);
return function () {
return fun.apply(object, args);
};
};
var BindAsEventListener = function (object, fun) {
var args = Array.prototype.slice.call(arguments).slice(2);
return function (event) {
return fun.apply(object, [event || window.event].concat(args));
};
};
var Extend = function (destination, source) {
for (var property in source) {
destination[property] = source[property];
};
};
var Class = function (properties) {
var _class = function () { return (arguments[0] !== null && this.initialize && typeof (this.initialize) == 'function') ? this.initialize.apply(this, arguments) : this; };
_class.prototype = properties;
return _class;
};

//=================
var Selects = new Class({
initialize: function (container, data, title) {
this.container = container;
this.num = title.length;
this.Events = new Array(title.length - 1);
var i, l, select;
for (i = 0; i < this.num; i++) {
container.innerHTML = container.innerHTML + " " + title[i];
container.appendChild(document.createElement('select'));
}
select = sName(container, 'select')[0];
for (i = 0, l = data.length; i < l; i++)
select.options.add(new Option(data[i].txt, data[i].value + '@' + i));
addListener(select, 'change', Bind(this, this.Change, select, data, 0));
this.Change(select, data, 0);
},
Change: function (obj, data, num) {
if (num == this.num - 1) return;
var valuestr = obj.value;
alert(valuestr);
var svalue = this.getValue(valuestr);
alert(svalue);
var menu = data[svalue].menu;
select = sName(this.container, 'select')[num + 1];
select.length = 0;
if (!menu) return;
if (this.Events[num] != undefined) removeListener(select, 'change', this.Events[num])
this.Events[num] = Bind(this, this.Change, select, menu, num + 1)
addListener(select, 'change', this.Events[num]);
for (var i = 0, l = menu.length; i < l; i++)
select.options.add(new Option(menu[i].txt, i));
this.Change(select, menu, num + 1);
},
getValue: function (value) {
var tmpcnt = value.indexOf('@');
alert(tmpcnt);
var resultstr = value.substring(tmpcnt+1, value.length);
alert(resultstr);
return resultstr;
}
});
//=================
window.onload = function () {
var data = [{ "txt": "人族", "value": "x001", "menu": [{ "txt": "大法师", "value": "x002", "menu": [{ "txt": "大法技能", "value": "x003", "menu": [{ "txt": "水元素", "value": "x004", "menu": [{ "txt": "召唤物", "value": "x005" }, { "txt": "穿刺攻击", "value": "x006" }, { "txt": "很好东西", "value": "x007"}] }, { "txt": "暴风雪", "value": "x001", "menu": [{ "txt": "魔法攻击", "value": "x001" }, { "txt": "面积伤害", "value": "x001" }, { "txt": "很漂亮", "value": "x001" }, { "txt": "可被打断", "value": "x001"}] }, { "txt": "辉煌光环", "value": "x001" }, { "txt": "瞬间移动", "value": "x001"}] }, { "txt": "英雄说明","value": "x001", "menu": [{ "txt": "智力英雄" }, { "txt": "强大光环" }, { "txt": "辅助型" }, ]}] }, { "txt": "山丘之王", "menu": [{ "txt": "山丘技能","value": "x001", "menu": [{ "txt": "风暴之锤" }, { "txt": "锥地" }, { "txt": "锥晕" }, { "txt": "天神下凡"}] }, { "txt": "英雄说明","value": "x001", "menu": [{ "txt": "力量英雄" }, { "txt": "秒杀能力" }, { "txt": "个子很矮" }, { "txt": "大技变态"}]}] }, { "txt": "圣骑士","value": "x001", "menu": [{ "txt": "圣骑技能","value": "x001", "menu": [{ "txt": "光" }, { "txt": "无敌" }, { "txt": "光环" }, { "txt": "复活"}] }, { "txt": "英雄说明","value": "x001", "menu": [{ "txt": "力量英雄" }, { "txt": "辅助英雄" }, { "txt": "人称奶妈"}]}] }, { "txt": "血法师","value": "x001", "menu": [{ "txt": "血法技能", "menu": [{ "txt": "火焰" }, { "txt": "吸蓝" }, { "txt": "虚无" }, { "txt": "神鸟凤凰"}] }, { "txt": "英雄说明", "menu": [{ "txt": "智力英雄" }, { "txt": "辅助英雄" }, { "txt": "长的很帅"}]}]}] }, { "txt": "兽族", "menu": [{ "txt": "贱圣", "menu": [{ "txt": "贱圣技能", "menu": [{ "txt": "疾风步" }, { "txt": "影分身" }, { "txt": "致命一击" }, { "txt": "剑刃风暴"}] }, { "txt": "英雄说明", "menu": [{ "txt": "敏捷英雄" }, { "txt": "高攻英雄" }, { "txt": "杀人越货" }, { "txt": "猥亵无敌" }, { "txt": "非常强大"}]}] }, { "txt": "先知男", "menu": [{ "txt": "先知技能", "menu": [{ "txt": "狼" }, { "txt": "日" }, { "txt": "闪电链" }, { "txt": "地震"}] }, { "txt": "英雄说明", "menu": [{ "txt": "智力英雄" }, { "txt": "骚扰英雄"}]}] }, { "txt": "牛头人酋长", "menu": [{ "txt": "牛头技能", "menu": [{ "txt": "冲击波" }, { "txt": "阵地" }, { "txt": "耐久光环" }, { "txt": "复活"}] }, { "txt": "英雄说明", "menu": [{ "txt": "力量英雄" }, { "txt": "魔法强大" }, { "txt": "长的威猛" }, { "txt": "一个肉盾"}]}] }, { "txt": "小YY", "menu": [{ "txt": "小Y技能", "menu": [{ "txt": "变动物" }, { "txt": "治疗波" }, { "txt": "小蛇棒子" }, { "txt": "全体无敌"}] }, { "txt": "英雄说明", "menu": [{ "txt": "敏捷英雄" }, { "txt": "魔法强大" }, { "txt": "辅助英雄"}]}]}] }, { "txt": "不死族", "menu": [{ "txt": "死亡骑士", "menu": [{ "txt": "亡骑技能", "menu": [{ txt: "大便一拓" }, { txt: "邪恶光环" }, { txt: "死亡契约" }, { txt: "复活亡灵"}] }, { "txt": "英雄说明", "menu": [{ txt: "骑的是羊" }, { txt: "未老先衰" }, { txt: "冰霜之哀" }, { txt: "啊而塞思"}]}] }, { "txt": "巫妖", "menu": [{ "txt": "巫妖技能", "menu": [{ txt: "暴冰" }, { txt: "冰甲" }, { txt: "契约" }, { txt: "死亡凋零"}] }, { "txt": "英雄说明", "menu": [{ txt: "穿裙子" }, { txt: "全是骨头" }, { txt: "不男不女"}]}] }, { "txt": "恐惧魔王", "menu": [{ "txt": "魔王技能" }, { "txt": "英雄说明"}] }, { "txt": "小强王子", "menu": [{ "txt": "王子技能" }, { "txt": "英雄说明"}]}]}];
new Selects(sID('demo1'), data, ["种族", "英雄"]);
new Selects(sID('demo2'), data, ["种族", "英雄", "介绍"]);
new Selects(sID('demo3'), data, ["种族", "英雄", "介绍", "技能"]);
new Selects(sID('demo4'), data, ["种族", "英雄", "介绍", "技能", "技能说明"]);
}

selectHelper的更多相关文章

  1. FullCalendar日历插件说明文档

    FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发,本文将FullCalendar的常用属性和方法.回调函数等整理成中 ...

  2. 从零开始编写自己的C#框架(14)——T4模板在逻辑层中的应用(三)

    原本关于T4模板原想分5个章节详细解说的,不过因为最近比较忙,也不想将整个系列时间拉得太长,所以就将它们整合在一块了,可能会有很多细节没有讲到,希望大家自己对着代码与模板去研究. 本章代码量会比较大, ...

  3. C# Web Forms - Using jQuery FullCalendar

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> ...

  4. jQuery 日历控件 FullCalendar 初识

    最近有个日程管理的需求,就学习了一下 FullCalendar 控件的一些基本知识,本文不是详细介绍该控件的 API 的文档,而是记录本人使用过程中的一些学习情况. 先看一下效果图  月/周/日视图 ...

  5. Web日程管理FullCalendar

    fullcalendar是一款jQuery日程管理控件,提供了丰富的属性设置和方法调用,官网下载地址http://fullcalendar.io/download,眼下最新版本号是2.3.2. 仅仅要 ...

  6. FullCalendar 的学习笔记(一)

    前一段时间,一个老项目需要新增一个小功能,日程表~ 于是网上找了下,发现FullCalendar这个控件还不错于是就拿来用了下,下面简单介绍下我的学习笔记. 首先就是了解下FullCalendar的A ...

  7. fullcalendar日历控件知识点集合

    1.基本的语法: 首先,fullcalendar和JQUERY一样,以面向对象的方式来组织代码.当然,这里的面向对象不过指能够把整个fullcalendar理解为一个类,这个类里包含有非常多的属性.方 ...

  8. fullcalendar日历控件集合知识

    1.基本的语法: 首先,fullcalendar和JQUERY一样,以面向对象的方式来组织代码.当然,这里的面向对象不过指能够把整个fullcalendar理解为一个类,这个类里包含有非常多的属性.方 ...

  9. FullCalendar 日历插件中文说明文档

    FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发,本文将FullCalendar的常用属性和方法.回调函数等整理成中 ...

随机推荐

  1. loadrunner添加变量检查点

    LoadRunner设置登陆检查点 login() { lr_think_time(); web_url("passport2", "URL=http://test232 ...

  2. 教你如何清除 MyEclipse/Eclipse 中 Web Browser 和 Switch Workspace 的历史记录

    有些许强迫症的开发人员可能会因为 MyEclipse/Eclipse 中 Web Browser 和 Switch Workspace 冗余的历史记录而感到苦恼,下面的方法就可以有效的帮助解决你的痛点 ...

  3. win10字体大小设置

    有时图形化界面不能正常显示,需要改变字体大小来查看 更改字体大小: 更改字体:

  4. Ionic Js十七:侧栏菜单

    一个容器元素包含侧边菜单和主要内容.通过把主要内容区域从一边拖动到另一边,来让左侧或右侧的侧栏菜单进行切换. 效果图如下所示:   用法 要使用侧栏菜单,添加一个父元素,一个中间内容 ,和一个或更 ...

  5. CPU线程 和 Java线程

    一 cpu个数.核数.线程数的关系 cpu个数:是指物理上,也及硬件上的核心数: 核数:是逻辑上的,简单理解为逻辑上模拟出的核心数:一个CPU核心数模拟出2线程的CPU 线程数:是同一时刻设备能并行执 ...

  6. POJ 2260 Error Correction 模拟 贪心 简单题

    Error Correction Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6825   Accepted: 4289 ...

  7. JAVAEE——SpringMVC第二天:高级参数绑定、@RequestMapping、方法返回值、异常处理、图片上传、Json交互、实现RESTful、拦截器

    1. 课前回顾 https://www.cnblogs.com/xieyupeng/p/9093661.html 2. 课程计划 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 ...

  8. 「JSOI2018」战争

    「JSOI2018」战争 解题思路 我们需要每次求给一个凸包加上一个向量后是否与另外一个凸包相交,也就是说是否存在 \[ b\in B,(b+w)\in A \] 这里 \(A, B\) 表示凸包内部 ...

  9. UOJ 310 黎明前的巧克力(FWT)

    [题目链接] http://uoj.ac/problem/310 [题目大意] 给出一个数集,A从中选择一些数,B从中选择一些数,不能同时不选 要求两者选择的数异或和为0,问方案数 [题解] 题目等价 ...

  10. Beego 和 Bee 的开发实例

    Beego不是一般的web开发包.它构建在大量已存在的Go之上,提供了许多的功能,以下是提供的功能: 一个完整的ORM 缓存 支持session 国际化(i18n) 实时监测和重载 发布支持 ==== ...