使用javascript实现二级联动菜单
2016-05-07 23:43
696 查看
本文主要探讨使用javascript实现二级联动菜单。众所周知,二级联动菜单在实际的开发中是比较常见的,虽说实现方式千差万别,但是,使用javascript对其进行实现是使用其他框架进行实现的基础。有必要研究探讨一下。
对2级菜单选项的数据使用1个二维数组来存放,并且,2个数组相应下标位置上的数据是对应的
运行效果
1.需求
比如,常见的选择所属地区的2级联动菜单,当选择省份之后,2级菜单选项会随之变化。2.实现思路
2.1页面使用2个select,并用id进行区分
<select id="city"></select> <select id="district"></select>
2.2关于菜单选项的数据
对1级菜单选项的数据使用1个数组对2级菜单选项的数据使用1个二维数组来存放,并且,2个数组相应下标位置上的数据是对应的
//城市 var city = ['请选择','北京','天津','上海','重庆']; //地区 var district = [[], ['东城','西城','朝阳','海淀'], ['河东','河西','河北','南开'], ['黄埔','徐汇','长宁','静安'], ['渝北','渝中','江北','江津']];
2.3页面加载后默认显示1级菜单选项的实现,需要使用window.onload来显示1级菜单
window.onload=function(){ createCity(); document.getElementById("city").onchange= createDistrict; };
2.4关于1级菜单的显示,用到了Option对象和select..options.add方法
function createCity(){ //获得1级菜单select var ci = document.getElementById("city"); //为1级菜单select添加option for(var i in city){ var op = new Option(city[i],city[i]); ci.options.add(op); } }
2.5关于实现2级联动,考虑对1级菜单使用onchange来动态加载2级菜单选项
document.getElementById("city").onchange= createDistrict;
2.6关于2级联动的具体实现,使用select.selectedIndex来获得1级菜单当前选中项的下标,并由此确定与之对应的2级菜单选项,之后,为2级菜单添加选项就行了
function createDistrict(){ //获取当前选中的一级菜单的选项的下标 var index = document.getElementById("city").selectedIndex; //获得2级菜单select var di = document.getElementById("district"); //清空二级菜单选项 di.options.length=0; //为2级菜单select添加option for(var i in district[index]){ var op = new Option(district[index][i],district[index][i]); di.options.add(op); } }
3.代码实现
submenu.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'submenu.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
//城市 var city = ['请选择','北京','天津','上海','重庆']; //地区 var district = [[], ['东城','西城','朝阳','海淀'], ['河东','河西','河北','南开'], ['黄埔','徐汇','长宁','静安'], ['渝北','渝中','江北','江津']];
window.onload=function(){ createCity(); document.getElementById("city").onchange= createDistrict; };
function createCity(){ //获得1级菜单select var ci = document.getElementById("city"); //为1级菜单select添加option for(var i in city){ var op = new Option(city[i],city[i]); ci.options.add(op); } }
function createDistrict(){ //获取当前选中的一级菜单的选项的下标 var index = document.getElementById("city").selectedIndex; //获得2级菜单select var di = document.getElementById("district"); //清空二级菜单选项 di.options.length=0; //为2级菜单select添加option for(var i in district[index]){ var op = new Option(district[index][i],district[index][i]); di.options.add(op); } }
</script>
</head>
<body>
<p>请选择所述地区:</p>
<select id="city"></select> <select id="district"></select>
</body>
</html>
运行效果
4.注意事项
4.1关于2级联动实现效果的保证,需要在每次联动时将已经存在的2级菜单的选项进行清空,否则会出现错误的显示效果,具体的实现是在每次添加2级菜单选项之前对2级菜单选项进行清空,使用select.options.length=0;
//获得2级菜单select var di = document.getElementById("district"); //清空二级菜单选项 di.options.length=0;
4.2关于页面首次加载的默认显示问题,可以为1级菜单加1个选项“请选择”,相应的2级菜单选项数据为1个空的数组就可以了,即通过菜单选项的数据来进行控制
//城市 var city = ['请选择','北京','天津','上海','重庆']; //地区 var district = [[], ['东城','西城','朝阳','海淀'], ['河东','河西','河北','南开'], ['黄埔','徐汇','长宁','静安'], ['渝北','渝中','江北','江津']];以上即为使用javascript实现二级联动菜单的内容,在此基础上还可以实现更为复杂的多级菜单,以及在实际应用中结合ajax从后台数据库取出数据进行动态显示等。
相关文章推荐
- jsp 资料
- Js实现下拉菜单
- javascript语言精粹(蝴蝶书)-笔记
- JS开发注意事项
- js基础01
- 部分js代码
- JavaScript简介
- javascript基础-窗口对象(window)
- js prototype 继承
- javascript基础-定时器
- 插入DocumentFragment与直接插入节点的区别
- js简介
- javascript基础-提交事件
- js事件之event.preventDefault()与event.stopPropagation()用法区别
- Threejs场景中的基本组件
- el表达式及jstl标签库
- JavaScript-函数柯里化
- 前端学习总结(三)javascript——前端世界的精髓所在
- javascript特效<一>--学习笔记
- js获取页面高度