js操纵跨frame的三级联动select下拉选项实例介绍


Posted in Javascript onMay 19, 2013

运用HTML、CSS以及Javascript相关知识,编写多窗口多菜单的内容联动。

考察学生关于frame、浏览器对象,以及表单控件的概念,javascript事件触发机制和程序设计,
以及用CSS来组织文字展示的掌握程度,使学生对DHTML有更加深刻的理解。
实验内容【必做】
(1)建立一个包含三个frame的窗口
(2)第一个frame1中包含一个select,内容是中国的各个省
(3)第二个frame2中同样含有一个select,内容是各省的地级市
(4)第三个frame3用来显示关于某地市的介绍。
(5)当在frame1的selecet中选择某个省,则frame2中的select自动把可选项变为该省下的各地市
(6)当在frame2中的select选中某地市后,在frame3中显示该地市的介绍
(7)介绍要求用div容纳,居左对齐,蓝色字,20px,首行缩进。

菜单联动参考界面效果

提示:实现本试验可以有多种方式(例如:css版,dom版,ajax版,prototype版都可以实现),学员只需选择一种实现方式即可。

菜单联动试验相关数据
江苏
南京 南京是江苏省的省会,六朝古都,历史遗迹丰富,文化底蕴深厚。
泰州 泰州是千年古郡,胡主席出生的地方,汪老师的故乡,以三麻出名,其中尤以麻将闻名。
苏州 “上有天堂,下有苏杭”,苏州以园林而出名,著名的园林有“拙政园”、“狮子林”等,人杰地灵,文人墨客辈出。

浙江
杭州 杭州是浙江省的省会,风景优美,人间仙境,所谓“上有天堂,下有苏杭”。
温州 温州最出名的就是商人,温州人几乎人人都经商,举国痛恨的温州炒房团就是其中的代表!
嘉兴 对嘉兴的了解,还是停留在嘉兴南湖上举行的那次历史性的大会。

广东
广州 广州是广东省的省会,经济发达,但是犯罪猖獗!
深圳 深圳是全国第一个经济特区,经济发达,几乎全是外来人口,跟广州一样,治安也不好。
珠海 珠海是我国第一批沿海开放城市之一,城市优美,典型的海滨城市,适合居住。

写了一个shit 味 不是太浓的js代码,供各位看官和懒蛋们享用。
上代码:
1.frame_a.htm: 显示省份province的下拉列表

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GBK"> 
</script> 
</head> 
<body > 
<h3>Frame A</h3> 
<form name="form1" method="post"> 
<SELECT ID="s1" NAME="s1" > 
<OPTION selected></OPTION> 
</SELECT> 
</form> 
</body> 
</html>

2.frame_b.htm: 显示某个身份的所有的城市city的下拉列表
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GBK"> 
</head> 
<body> 
<h3>Frame B</h3> 
<form name="form2" method="post"> 
<SELECT ID="s2" NAME="s2" > 
<OPTION selected></OPTION> 
</SELECT> 
</form> 
</body> 
</html>

3.frame_c.htm:显示对应的city的描述description.
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GBK"> 
</head> 
<body> 
<h3>Frame C</h3> 
<div id="description"></div> 
</body> 
</html

4,index.htm: 全局框架,总控页面.
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GBK"> 
<script language="javascript" type="text/javascript"> 
var provinces = new Array(); 
provinces[0] = "江苏"; 
provinces[1] = "浙江"; 
provinces[2] = "广东"; 
var cities = new Array(); 
cities[0] = new Array(); 
cities[0][0] = "南京"; 
cities[0][1] = "泰州"; 
cities[0][2] = "苏州"; 
cities[1] = new Array(); 
cities[1][0] = "杭州"; 
cities[1][1] = "温州"; 
cities[1][2] = "嘉兴"; 
cities[2] = new Array(); 
cities[2][0] = "广州"; 
cities[2][1] = "深圳"; 
cities[2][2] = "珠海"; 
var descriptions = new Array(); 
descriptions[0] = new Array(); 
descriptions[0][0] = "南京是江苏省的省会,六朝古都,历史遗迹丰富,文化底蕴深厚"; 
descriptions[0][1] = "泰州是千年古郡,胡主席出生的地方,汪老师的故乡,以三麻出名,其中尤以麻将闻名"; 
descriptions[0][2] = "上有天堂,下有苏杭,苏州以园林而出名,著名的园林有“拙政园”、“狮子林”等,人杰地灵,文人墨客辈出。"; 
descriptions[1] = new Array(); 
descriptions[1][0] = "杭州是浙江省的省会,风景优美,人间仙境,所谓“上有天堂,下有苏杭”。"; 
descriptions[1][1] = "温州最出名的就是商人,温州人几乎人人都经商,举国痛恨的温州炒房团就是其中的代表!"; 
descriptions[1][2] = "对嘉兴的了解,还是停留在嘉兴南湖上举行的那次历史性的大会"; 
descriptions[2] = new Array(); 
descriptions[2][0] = "广州是广东省的省会,经济发达,但是犯罪猖獗!"; 
descriptions[2][1] = "深圳是全国第一个经济特区,经济发达,几乎全是外来人口,跟广州一样,治安也不好。"; 
descriptions[2][2] = "珠海是我国第一批沿海开放城市之一,城市优美,典型的海滨城市,适合居住。"; var current_province; 
var current_city; 
function setCity(province, city) 
{ 
// alert("city"); 
//frame_b 
var obj = window.frames.frame_b.document.getElementById("s2"); 
var length = cities[province].length; 
for(i = 0; i < length; ++i) { 
obj[i] = new Option(cities[province][i]); 
obj[i].selected = "false"; 
} 
obj[city].selected = true; 
current_city = city; 
setCityDescription(province, city); 
} 
function setCityDescription(province, city) 
{ 
// alert("description"); 
//frame_c 
var obj = window.frames.frame_c.document.getElementById("description"); 
obj.innerHTML = descriptions[province][city]; 
} 
function setProvince(province) 
{ 
// alert("province"); 
// var obj = window.frames.frame_a.document.getElementById("s1"); 
// var obj = window.frames["frame_a"].document.getElementById("s1"); 
//var obj = window.frames[0].document.getElementById("s1"); 
// var obj = window.frames["frame_a"]; //.document.getElementById("s1"); 
// obj = obj.document.getElementById("s1"); 
var obj = window.frames["frame_a"].document.getElementById("s1"); //由于chrome对跨域访问的检查在本地无法显示,在上传到服务器上显示无误。 
var length = provinces.length; 
for(i = 0; i < length; ++i) { 
obj[i] = new Option(provinces[i]); 
obj[i].selected = "false"; 
} 
obj[province].selected = "true"; 
current_province = province; 
var city = 0; 
setCity(province, city); 
//setCityDescription(province, city); 
} 
function init(province, city) 
{ 
setProvince(province); 
setCity(province, city); 
setCityDescription(province, city); 
var obj = window.frames.frame_a.document.getElementById("s1"); 
obj.onchange = Function("setProvince(this.selectedIndex)"); 
// alert(obj.selectedIndex); 
var obj = window.frames.frame_b.document.getElementById("s2"); 
obj.onchange = Function("setCity(current_province, this.selectedIndex)"); 
// alert(obj.selectedIndex); 
} 
</script> 
</head> 
<frameset cols="35%,65%" onload="init(0, 0);"> 
<frame src="frame_a.htm" name="frame_a"> 
<frameset rows="50%,50%"> 
<frame src="frame_b.htm" name="frame_b"> 
<frame src="frame_c.htm" name="frame_c"> 
</frameset> 
</frameset> 
</html>

5.后记
1)灵活性: function init(province, city) 在页面onload时,可以指定初始显示的城市。竞价排名。
2)可扩展性:可以通过增加数组中的数据源,来增加对更多城市的支持。数据源,可以通过xml文件,或者ajax方式实现动态的数据源,利用dom操作实现。
3)跨域问题: 由于chrome对frame进行跨域检查,所以在本地不经过设置,页面无法显示。不过,上传到服务器上,可以,没有问题。
Javascript 相关文章推荐
Using the TextRange Object
Oct 14 Javascript
一直复略了的一个问题,关于表单重复提交
Feb 15 Javascript
实现png图片和png背景透明(支持多浏览器)的方法
Sep 08 Javascript
JavaScript学习笔记(十)
Jan 17 Javascript
在多个页面使用同一个HTML片段的代码
Mar 04 Javascript
一个可拖拽列宽表格实例演示
Nov 26 Javascript
js操作textarea 常用方法总结
Dec 03 Javascript
JavaScript Serializer序列化时间处理示例
Jul 31 Javascript
基于javascript实现动态显示当前系统时间
Jan 28 Javascript
使用react-router4.0实现重定向和404功能的方法
Aug 28 Javascript
layui中使用jquery控制radio选中事件的示例代码
Aug 15 jQuery
vue中更改数组中属性,在页面中不生效的解决方法
Oct 30 Javascript
固定背景实现的背景滚动特效示例分享
May 19 #Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
May 19 #Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
May 17 #Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
May 17 #Javascript
javascript解决innerText浏览器兼容问题思路代码
May 17 #Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
May 17 #Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
May 17 #Javascript
You might like
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
2014/05/12 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
jQuery实现单行文字间歇向上滚动源代码
2013/06/02 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
关于onchange事件在IE和FF下的表现及解决方法
2014/03/08 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
win系统下nodejs环境安装配置
2017/05/04 NodeJs
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
使用python计算三角形的斜边例子
2020/04/15 Python
详解Python中的文件操作
2021/01/14 Python
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
消防安全管理制度
2014/02/01 职场文书
行政助理的岗位职责
2014/02/18 职场文书
煤矿安全演讲稿
2014/05/09 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
会计做账心得体会
2016/01/22 职场文书
2016保送生自荐信范文
2016/01/29 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL
用php如何解决大文件分片上传问题
2021/07/07 PHP
OpenCV实现普通阈值
2021/11/17 Java/Android