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 相关文章推荐
jquery 与NVelocity 产生冲突的解决方法
Jun 13 Javascript
js查错流程归纳
May 04 Javascript
jQuery 图片切换插件(代码比较少)
May 07 Javascript
等待指定时间后自动跳转或关闭当前页面的js代码
Jul 09 Javascript
javascript通过className来获取元素的简单示例代码
Jan 10 Javascript
JQuery实现表格动态增加行并对新行添加事件
Jul 30 Javascript
详解JavaScript的回调函数
Nov 20 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
Dec 14 Javascript
JS实现横向轮播图(初级版)
Jun 24 Javascript
JS实现鼠标按下拖拽效果
Jul 23 Javascript
vue watch监控对象的简单方法示例
Jan 07 Vue.js
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
固定背景实现的背景滚动特效示例分享
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 页面执行时间计算代码
2008/12/04 PHP
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
nginx 设置多个站跨域
2021/03/09 Servers
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
2018/10/08 HTML / CSS
浅谈html5 响应式布局
2014/12/24 HTML / CSS
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
保密工作责任书
2014/04/16 职场文书
校园文明倡议书
2014/05/16 职场文书
离婚财产分配协议书
2014/10/21 职场文书
先进单位申报材料
2014/12/25 职场文书
爱情保证书
2015/01/17 职场文书
中小学生安全教育观后感
2015/06/17 职场文书
严以律己学习心得体会
2016/01/13 职场文书