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中邮箱地址 URL网站地址正则验证实例代码
Sep 15 Javascript
jQuery实现页面点击后退弹出提示框的方法
Aug 24 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
Sep 27 Javascript
javascript中异常处理案例(推荐)
Oct 03 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
Dec 30 Javascript
Node.js学习入门
Jan 03 Javascript
jQuery使用方法
Feb 04 Javascript
AngularJS 控制器 controller的详解
Oct 17 Javascript
微信小程序实现蒙版弹窗效果
Nov 01 Javascript
Bootstrap实现模态框效果
Sep 30 Javascript
JS实现星星海特效
Dec 24 Javascript
javascript 数组精简技巧小结
Feb 26 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
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
简单的PHP多图上传小程序代码
2011/07/17 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
mouse_on_title.js
2006/08/25 Javascript
用js怎么把&amp;字符换成&quot;&amp;amp:&quot;
2006/10/19 Javascript
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
原生js实现日期联动
2015/01/12 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
js实现添加删除表格(两种方法)
2017/04/27 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
ES6 Symbol在对象中的作用实例分析
2020/06/06 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
Python解释执行原理分析
2014/08/22 Python
Django中对通过测试的用户进行限制访问的方法
2015/07/23 Python
python字符串与url编码的转换实例
2018/05/10 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
python读取指定字节长度的文本方法
2019/08/27 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
期中考试后的反思
2014/02/08 职场文书
企业总经理岗位职责
2014/02/13 职场文书
演讲稿的写法
2014/05/19 职场文书
大学学雷锋活动总结
2014/06/26 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书