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 相关文章推荐
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
Aug 09 Javascript
zTree插件之多选下拉菜单实例代码
Nov 06 Javascript
JS中typeof与instanceof之间的区别总结
Nov 14 Javascript
返回上一页并自动刷新的JavaScript代码
Feb 19 Javascript
JavaScript 实现打印,打印预览,打印设置
Dec 30 Javascript
jQuery插件jRumble实现网页元素抖动
Jun 05 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
Jul 01 Javascript
JavaScript Array对象详解
Mar 01 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
Aug 02 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
May 30 Javascript
三步搞定:Vue.js调用Android原生操作
Sep 07 Javascript
three.js中多线程的使用及性能测试详解
Jan 07 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
PHP 面向对象 final类与final方法
2010/05/05 PHP
php生成随机密码的三种方法小结
2010/09/04 PHP
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
jQuery代码优化 选择符篇
2011/11/01 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
2013/06/08 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
前端微信支付js代码
2016/07/25 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
Javascript实现的StopWatch功能示例
2017/06/13 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
Python实用日期时间处理方法汇总
2015/05/09 Python
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
python中根据字符串调用函数的实现方法
2016/06/12 Python
浅谈python 里面的单下划线与双下划线的区别
2017/12/01 Python
python获取url的返回信息方法
2018/12/17 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
匡威英国官网:Converse英国
2018/12/02 全球购物
绿色环保演讲稿
2014/05/10 职场文书
电气工程师岗位职责
2015/02/12 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
党员违纪检讨书
2015/05/05 职场文书
立案决定书范文
2015/06/24 职场文书
英文投诉信格式
2015/07/03 职场文书
培训计划通知
2015/07/15 职场文书
一篇文章弄懂MySQL查询语句的执行过程
2021/05/07 MySQL
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS