搜索
系统检测到您的用户名不符合规范:

多级联动

浏览:2325 发布日期:2016年09月01日 分类:功能实现 关键字: js 多级联动 三级联动 四级联动 五级...
多级联动 直接把代码复制就可以运行 纯前段 不带后端和数据库 底部附带代码压缩包
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JavaScript 自定义多级联动下拉菜单</title>
<script type="text/javascript">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': '1',
'txt': 'value'
},

{
'val': '2 ->',
'menu': [

{
'val': '2_1'
},

{
'val': '2_2'
}

]
},

{
'val': '3 ->',
'menu': [

{
'val': '3_1 ->',
'menu': [

{
'val': '3_1_1'
},

{
'val': '3_1_2'
}

]
},

{
'val': '3_2'
}

]
},

{
'val': '4 ->',
'menu': [

{
'val': '4_1 ->',
'menu': [

{
'val': '4_1_1 ->',
'menu': [

{
'val': '4_1_1_1'
}

]
}

]
}

]
}

];

var sel = ["sel1", "sel2", "sel3", "sel4", "sel5"];

var val = ["3 ->", "3_1 ->", "3_1_2"];

var cs = new CascadeSelect(sel, menu, {
Default: val
});

$("btnA").onclick = function() {
cs.ShowEmpty = !cs.ShowEmpty;
}

$("btnB").onclick = function() {

cs.Add(

{
'val': '5 ->',
'menu': [

{
'val': '5_1 ->',
'menu': [

{
'val': '5_1_1 ->',
'menu': [

{
'val': '5_1_1_1 ->',
'menu': [

{
'val': '5_1_1_1_1'
}

]
}

]
}

]
}

]
}

)

}

$("btnC").onclick = function() {

cs.Delete(3)

}

}</script>
<style type="text/css">.sel select{ width:100px;}</style></head>
<body>
<div class="sel">
<select id="sel1"></select>
<select id="sel2"></select>
<select id="sel3"></select>
<select id="sel4"></select>
<select id="sel5"></select>
</div>
<br />
<div>
<input id="btnA" type="button" value="显示/不显示空值" />
<input id="btnB" type="button" value="添加菜单" />
<input id="btnC" type="button" value="减少菜单" /></div>
</body>
</html>

附件 duoji.zip ( 2.33 KB 下载:69 次 )

评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
onlyquan
积分:3740 等级:LV4
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /