2. 級聯下拉框
chainselect.html
<html>
<head>
<title>級聯下拉框</title>
<meta http-equiv=”Content-Type” content=”text/html;charset=UTF-8”>
<link type=”text/css” rel=”stylesheet” href=”css/chainselect.css” />
<script type=”text/javascript” src=”js/jquery.js”></script>
<script type=”text/javascript” src=”js/ chainselect.js”></script>
</head>
<body>
<div class=”loading”>
<p><img src=”imags/data-loading.gif” alt=”資料轉載中” /></p>
<p>資料轉載中……</p>
</div>
<div class=”car”>
<span class=”carname”>
汽車廠商:
<select>
<option value=”” selected=”selected”>請選擇汽車廠商</option>
<option value=”BMW”>寶馬</option>
<option value=”Audi >奧迪</option>
<option value=”VM >大衆</option>
</select>
<img src=images/pfeil.gif” alt=”有資料” />
</span>
<span class=”cartype”>
汽車類型:
<select></select>
<img src=”images/pfeil.gif” alt=”有資料” />
</span>
<span class=”whelltype”>
車輪類型:
<select></select>
</span>
</div>
<div class=”carimage”>
<p> <img src=”images/img-loading.gif” alt=”圖檔裝載中” class=”carloading” /></p>
<p> <img src=”” alt=”汽車圖檔” class=”carimg”/></p>
</div>
</body>
</html>
chainselect.css
.loading {
width: 400px;
//margin-left: auto;
//margin-right:auto;
margin: 0 auto;
visibility: hidden;
}
.loading p {
text-align: center;
}
p {
margin: 0;
}
.car {
width: 500px;
margin: 0 atuo;
text-align: center;
}
.carimage {
text-align: center;
}
.cartype , .wheeltype , .carloading, .carimg, .car img {
display: none;
}
chainselect.js
$(document).ready(function() {
//找到三個下拉框
var carnameSelect = $(“.carname”).children(“select”);
var cartypeSelect + $(“.cartype”).children(“select”);
var wheeltypeSelect = $(“.whelltype”).children(“select”);
var carimg = $(“.carimg”);
//給三個下拉框注冊事件
carnameSelect.change(function(){
//1. 需要獲得目前下拉框的值
var carnameValue = $(this).val():
wheeltypeSelect.parent().hide();
carimg.hide().attr(“src”,””);
//2. 如果值不為空,則将下拉框的值傳送給伺服器
if(carnameValue != “”) {
if(!carnameSelect.data(carnameValue)) {
$.post(“ChainSelect”,{keyward: carnameValue,type: top}, function(data){
//2.1 接收伺服器傳回的汽車類型
if(data.length != 0) {
//2.2 解析汽車類型的資料,填充到汽車類型下拉框中
cartypeSelect.html(“”);
$(“<option value=’’>請選擇汽車類型</option>”).appendTo(cartypeSelect);
for(var i = 0; i < data.length; i++) {
$(“<option value=’” + data[i] + “’>” + data[i] + “</option>”).appendTo(cartypeSelect);
cartypeSelect.parent().show(); //汽車類型的下拉框顯示出
carnameSelect.next().show(); //第一個下拉框後面的訓示圖檔顯示出來
}
} else {
//2.3 沒有任何汽車類型的資料
cartypeSelect.parent().hide();
carnameSelect.next().hide();
}
carnameSelect.data(carnameValue, data);
}, ”json”)
} else {
var data = cartypeSelect.data(carnameValue);
if(data.length != 0) {
cartypeSelect.html(“”);
$(“<option value=’’>請選擇汽車類型</option>”).appendTo(cartypeSelect);
for(var i = 0; i < data.length; i++) {
$(“<option value=’” + data[i] + “’>” + data[i] + “</option>”).appendTo(cartypeSelect);
cartypeSelect.parent().show(); //汽車類型的下拉框顯示出
carnameSelect.next().show(); //第一個下拉框後面的訓示圖檔顯示出來
}
} else {
//2.3 沒有任何汽車類型的資料
cartypeSelect.parent().hide();
carnameSelect.next().hide();
}
}
} else {
//3. 如果值為空,那麼第二個下拉框所在span要隐藏起來,第一個下拉框後面的訓示圖檔也要隐藏
cartypeSelect.parent().hide();
carnameSelect.next().hide();
}
});
cartypeSelect.change(function(){
//1. 需要獲得目前下拉框的值
var cartypeValue = $(this).val():
carimg.hide().attr(“src”,””);;
//2. 如果值不為空,則将下拉框的值傳送給伺服器
if(cartypeValue != “”) {
if(!cartypeSelect.data(cartypeValue)) {
$.post(“ChainSelect”,{keyward: cartypeValue,type: sub}, function(data){
//2.1 接收伺服器傳回的汽車類型
if(data.length != 0) {
//2.2 解析汽車類型的資料,填充到車輪類型下拉框中
carwheelSelect.html(“”);
$(“<option value=’’>請選擇車輪類型</option>”).appendTo(wheeltypeSelect);
for(var i = 0; i < data.length; i++) {
$(“<option value=’” + data[i] + “’>” + data[i] + “</option>”)
.appendTo(wheeltypeSelect);
wheeltypeSelect.parent().show(); //車輪類型的下拉框顯示出
cartypeSelect.next().show(); //第二個下拉框後面的訓示圖檔顯示出來
}
} else {
//2.3 沒有任何汽車類型的資料
wheeltypeSelect.parent().hide();
cartypeSelect.next().hide();
}
cartypeSelect.data(cartypeValue,data);
}, ”json”)
}else {
var data = cartypeSelect.data(cartypeValue);
if(data.length != 0) {
//2.2 解析汽車類型的資料,填充到車輪類型下拉框中
carwheelSelect.html(“”);
$(“<option value=’’>請選擇車輪類型</option>”).appendTo(wheeltypeSelect);
for(var i = 0; i < data.length; i++) {
$(“<option value=’” + data[i] + “’>” + data[i] + “</option>”)
.appendTo(wheeltypeSelect);
wheeltypeSelect.parent().show(); //車輪類型的下拉框顯示出
cartypeSelect.next().show(); //第二個下拉框後面的訓示圖檔顯示出來
}
} else {
//2.3 沒有任何汽車類型的資料
wheeltypeSelect.parent().hide();
cartypeSelect.next().hide();
}
}
} else {
//3. 如果值為空,那麼第三個下拉框所在span要隐藏起來,第一個下拉框後面的訓示圖檔也要隐藏
wheeltypeSelect.parent().hide();
cartypeSelect.next().hide();
}
});
wheeltypeSelect.change(function(){
//1. 擷取車輪類型
var wheeltypeValue = $(this).val();
//2. 根據汽車廠商名稱,汽車類型和車輪類型的到汽車圖檔的檔案名
var carnameValue = carnameSelect.val();
var cartypeValue = cartypeSelect.val();
var carimgname = carnameValue + “_” + cartypeValue + “_” + wheeltypeValue + “.jpg”;
carimg.hide();
$(“.carloading”).show(); //顯示loading的圖檔
//通過javascript中的Image對象預裝載圖檔
var cacheimg = new Image();
$(cacheimg).attr(“src”,”images/” + carimgname).load(function(){
$(“.carloading”).hide(); //隐藏loading圖檔
carimg.attr(“src”,”images/” + carimgname).show();
});
//3. 修改汽車圖檔節點的src的值,讓汽車圖檔顯示
//carimg.attr(“src”,”images/” + carimgname).show();
});
//給資料裝載中的節點定義ajax事件,實作動畫提示效果
$(“.loading”).ajaxStart(function(){
$(this).css(“visibility”,”visible”);
$(this).animate({
opacity: 0;
},0);
}).ajaxStop(function(){
//$(this).fadeOut(500);
$(this).animate({
opacity: 0;
},500);
});
});
知識寶典
1. img标簽的alt屬性要寫上,在圖檔尚未裝載進來或圖檔不存在時,這個屬性的文字資訊會顯示出來
2. select表示下拉框,下拉框的每一項都是一個option,option開始結尾标簽中的内容會顯示在頁面上,value屬性的值則是用于在Jquery中用val方法擷取并發送給伺服器的。定義了selected的屬性值為selected時,表示目前option被選中
3. div元素居中顯示的方法:給div設定寬度,然後margin-left和margin-right的值都為auto.簡化方法是margin:0 auto;
4. html的p标簽表示一個段落的内容,其中的内容會獨占一行或多行,後面的内容會另起一行顯示
5. 為了讓p中文字和圖檔居中,可以使用text-align屬性,屬性值為center。p标簽預設有margin-top和margin-bottom的值,需要的話可以通過css清楚
6. visibility的屬性值為hidden是,元素隐藏,但是和display為none不同的是,在頁面中仍然占據一定的空間,隻是不顯示
7. 多個選擇器如果有相同的屬性值,可以放在一起定義,選擇器之間用逗号分隔
8. change方法對于javascript中的onchange事件,可以處理下拉框内容變化的事件
9. parent方法可以獲得一個節點的父節點
10. next方法可以獲得一個節點的下一個兄弟節點,對應的previous方法可以獲得一個節點的上一個兄弟節點
11. $.post方法可以和伺服器端發起post的異步請求。第一個參數是請求的伺服器位址,第二個參數是發送給伺服器端的資料,參數是Javascript的對象,采用名值對的方式表示,第三個參數是回調方法,第四個參數訓示伺服器端傳回的資料類型,Jquery會根據這個參數幫我們進行轉換。get方法隻有第二個參數不同,其他幾個參數用法相同
12. Javascript中的簡單對象定義方式是{key1:value1, key2:value2}
13. JSON的資料格式其實就是Javascript中的一個對象或資料定義的文本格式内容,比如{kery1:value1, key2:[1,2,3]} 或[1,2,{key2:value2}]
14. 可以直接$(“<option></option>”)的方法來建立下拉框中的選項,然後用appendTo這樣的方法加入到下拉框中
15. attr方法可以設定或擷取某一個節點的屬性值
16. ajaxStart在每一個Jquery發出的ajax請求開始前執行,ajaxStop在Jquery隊列中所有的ajax請求結束後執行,ajaxComplete在每一個Jquery發出的ajax請求結束後執行
17. fadeOut和fadeIn可以實作淡出淡入的效果,參數内容和slideUp, slideDown方法類似
18. animate方法可以實作任意的動畫效果,可以控制某個css屬性在某個事件内進行變化,進而達到動畫的效果
19. opacity可以改變元素的透明度,IE中使用過濾器實作,100表示完全顯示,0表示完全透明,非IE浏覽器使用opacity屬性,1表示完全顯示,0表示透明。Jquery在animate方法中屏蔽了浏覽器差異,直接使用opacity就可以達到淡入淡出的效果
20. data方法可以用于緩存資料。緩存可以提高系統的運作效率,降低伺服器端的符合
21. 可以使用Javascript中的Image對象來預裝載圖檔,這樣可以知道圖檔何時裝載完成,以便給出一些圖檔裝載的提示資訊
22. load方法可以對應Javascript中的onload事件,本例中用于捕捉圖檔加載完成的事件