運用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進行跨域檢查,所以在本地不經過設置,頁面無法顯示。不過,上傳到服務器上,可以,沒有問題。