js 联动下拉菜单
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>js 联动下拉菜单</title>
<script>
window.onload=function()
{
var s1=new Sel('div1');
// 数据
s1.add('0',['1','2','3']);
s1.add('0_0',['1_1','1_2','1_3']);
s1.add('0_0_0',['1_1_1','1_1_2','1_1_3']);
s1.add('0_0_1',['1_2_1','1_2_2','1_2_3']);
s1.add('0_0_2',['1_3_1','1_3_2','1_3_3']);
s1.add('0_1',['2_1','2_2','2_3']);
s1.add('0_1_0',['2_1_1','2_1_2','2_1_3']);
s1.add('0_1_1',['2_2_1','2_2_2','2_2_3']);
s1.add('0_1_2',['2_3_1','2_3_2','2_3_3']);
s1.add('0_2',['3_1','3_2','3_3']);
s1.add('0_2_0',['3_1_1','3_1_2','3_1_3']);
s1.add('0_2_1',['3_2_1','3_2_2','3_2_3']);
s1.add('0_2_2',['3_3_1','3_3_2','3_3_3']);
s1.init(3); // 几个下拉框
}
function Sel(id)
{
this.oParent=document.getElementById(id); //选择容器
this.data={}; // 存放数据
this.aSel=this.oParent.getElementsByTagName('select'); // 创建容器中的 select 下拉框
}
Sel.prototype=
{
init:function(num)
{
var This=this;
for(var i=1;i<=num;i++)
{
var oSel=document.createElement('select');
var opt=document.createElement('option');
opt.innerHTML='默认'; // 每个下拉框的初始值
oSel.appendChild(opt); // 每个下拉框的初始元素
oSel.index=i; //1,2,3
this.oParent.appendChild(oSel); // 添加初始元素
oSel.onchange=function() // 当下拉框改变的时候
{
This.change(this.index);
}
}
this.first();//创建第一个
},//初始化对象
add:function(key,val)
{
this.data[key]=val;
},//添加数据
first:function()
{
var arr=this.data['0'];
for(var i=0;i<arr.length;i++)
{
var opt=document.createElement('option');
opt.innerHTML=arr[i];
this.aSel[0].appendChild(opt);
}
},//创建第一个下拉菜单----元素添加数据
change:function(now)
{
var str='0';
for(i=0;i<now;i++) //now====0,1,2 如果now=0,循环时str=0_0
{
str+='_'+(this.aSel[i].selectedIndex-1);
//取得当前选中元素的下一级的数据
}
if(this.data[str]) //如果有数据
{
var arr=this.data[str];
this.aSel[now].options.length=1;
for(var i=0;i<arr.length;i++)
{
var opt=document.createElement('option');
opt.innerHTML=arr[i];
this.aSel[now].appendChild(opt);
} // -------------------------------添加数据
this.aSel[now].options[1].selected=true;
now++;
if(now<this.aSel.length)
{
this.change(now); // 更新下级
}
}
else
{
for(var i=now;i<this.aSel.length;i++)
{
this.aSel[i].options.length=1;
}// 返回默认值
}
}, // -------------------------change 结束
}
</script>
</head>
<body>
<div id="div1"></div>
</body>
</html>
js 联动下拉菜单的更多相关文章
- jQuery cxSelect 多级联动下拉菜单
随着电商热门,这种多层次的互动更充分地体现在下拉菜单,最明显的是多级联动地址下拉选择,因此,这里是一个简单的分享 jQuery cxSelect 多级联动下拉菜单 cxSelect 它是基于 jQue ...
- (实用篇)jQuery+PHP+MySQL实现二级联动下拉菜单
二级联动下拉菜单选择应用在在很多地方,比如说省市下拉联动,商品大小类下拉选择联动.本文将通过实例讲解使用jQuery+PHP+MySQL来实现大小分类二级下拉联动效果. 先看下效果 大类: 前端技术 ...
- 纯css和js版下拉菜单
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- js版本下拉菜单
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- JS实现下拉菜单的功能
<!DOCTYPE html> <html> <head> <meta charset = "utf8"> <title> ...
- php+ajax的三级联动下拉菜单
封装一个三级联动,就可以在任何页面进行引用了 先写个页面引用一下这个js <head> <meta http-equiv="Content-Type" conte ...
- ajax三级联动下拉菜单
ajax写三级联动,先写一个文件类吧,以后用的时候直接调用即可: 来找一张表: 实现: 中国地域的三级联动:省.市.区: 图: 说一下思路: (1)当用户选择省份的时候触发事件,把当前的省份的id通过 ...
- 2016/3/24 ①数据库与php连接 三种输出fetch_row()、fetch_all()、fetch_assoc() ②增删改时判断(布尔型) ③表与表之间的联动 ④下拉菜单 ⑤登陆 三个页面
①数据库与php连接 图表 header("content-type:text/html;charset=utf-8"); //第一种方式: //1,生成连接,连接到数据库上的 ...
- js模拟下拉菜单-键盘、鼠标(代码详解)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- <c:set var="ctx" value="${pageContext.request.contextPath}" />的学习
${pageContext.request.contextPath},是获取当前根目录 set var="ctx",是给这个路径定义了一个变量,用的时候可以通过EL表达式获取:${ ...
- SQL Server连接Oracle FAIL
第一步 安装好oracle客户端Oracle 11.2.0.3 Client Win 64-bit,并配置好TNS信息 第二步,配置odbc信息 配置好odbc连接信息,sql server肯定不能直 ...
- js 中的apply
之一------(函数的劫持与对象的复制)关于对象的继承,一般的做法是用复制法: Object.extend 见protpotype.js 的实现方法: Object.extend = functio ...
- Select2下拉选项库 部分积累
用了这么久的Select2插件,也该写篇文章总结总结. 在我的印象里Select2有2个版本,最新版本有一些新的特性,并且更新了一下方法参数,比最初版本要好看一些,本文针对新版本. 官网:http:/ ...
- Hbuilder实用技巧(转)
Hbuilder实用技巧 原创 2016年05月19日 10:25:42 标签: hbuilder 操作 16551 1. Q:怎么实现代码追踪? A:在编辑代码时经常会出现需要跳转到引用文件或者变量 ...
- HDU 4921 Map(状态压缩)
题意看这篇博客. 思路参考的这篇博客. 补充:面对这种问题有一个常见的套路.比如计算若干个区间对答案的贡献这种问题,直接暴力可能复杂度到O(n ^ 2), 而我们可以计算出每个元素在多少个合法区间中, ...
- 开发同事 Linux 实用基本操作
Linux 有复杂的体系,有很多的命令,开发同事日常开发时,不像运维同事需要熟练使用很多命令. 下面记录下我在工作中,常用的基本命令: 一 日志查看 对于开发同事来说,日常工作中,Linux 中最常用 ...
- JAVA面向接口的编程思想与具体实现
面向对象设计里有一点大家已基本形成共识,就是面向接口编程,我想大多数人对这个是没有什么觉得需要怀疑的. 问题是在实际的项目开发中我们是怎么体现的呢? 难道就是每一个实现都提供一个接口就了 ...
- 友盟让用户数据动起来——给app增加运营
让用户数据动起来——给app增加运营 一.初识友盟 友盟大家都听说过,在给app集成友盟之前对友盟的认识没有那么深刻.用了友盟之后,才发现友盟很强大. 集成友盟能够获取那些数据呢? 用户的基本信息:比 ...
- PAT甲 1095 解码PAT准考证/1153 Decode Registration Card of PAT(优化技巧)
1095 解码PAT准考证/1153 Decode Registration Card of PAT(25 分) PAT 准考证号由 4 部分组成: 第 1 位是级别,即 T 代表顶级:A 代表甲级: ...