jquery+json 通用三級(jí)聯(lián)動(dòng)下拉列表
更新時(shí)間:2010年04月19日 22:28:15 作者:
用Jquery實(shí)現(xiàn),原始代碼只支持IE,這里我改了一下,我的代碼里面有三個(gè)版本的實(shí)現(xiàn)
Author: shaoyun
Email: shaoyun (at) yeah.net
Date: 2010-03-10 02:03
Blog: http://shaoyun.cnblogs.com/
用Jquery實(shí)現(xiàn),原始代碼只支持IE,這里我改了一下,我的代碼里面有三個(gè)版本的實(shí)現(xiàn)
第一個(gè)是通過(guò)讀取XML構(gòu)建,支持IE/firefox,chrome不支持,有興趣的可以將讀取XML的部分改成AJAX的方式,這樣chrome支持就不成問(wèn)題
第二個(gè)是采用Json數(shù)據(jù)格式構(gòu)建,是我的第二次嘗試改進(jìn)
第三個(gè)與第二個(gè)其實(shí)是一樣的,只不過(guò)將數(shù)據(jù)分離到JS文件中,我的代碼中有一個(gè)ASP文件,是調(diào)用數(shù)據(jù)庫(kù)生成Json省市區(qū)數(shù)據(jù)的,如果頁(yè)面直接調(diào)用ASP文件,速度會(huì)很慢,生成JS文件后直接調(diào)用就要快的多,而且這部分?jǐn)?shù)據(jù)一般不會(huì)改動(dòng)
更新記錄:
++2010-04-19 12:11:24
多加了一個(gè)插件的例子,其實(shí)不算插件,就是一函數(shù),為什么不寫(xiě)成插件,只是基于靈活性的考慮,
讓select可以放在頁(yè)面的任何位置,而不是局限在div、table、td等頁(yè)面元素內(nèi)
參數(shù)類似下面,s1/s2/s3配置select的id,v1/v2/v3為默認(rèn)值,如果不想設(shè)置請(qǐng)?jiān)O(shè)置為null,或者直接不設(shè)置
參數(shù)配置如下,配置select的三個(gè)ID和默認(rèn)值就行,無(wú)默認(rèn)值填寫(xiě)為null
var defaults = {
s1:'Select1',
s2:'Select2',
s3:'Select3',
v1:null,
v2:null,
v3:null
};
這算是第四個(gè)例子,目錄下的php文件是服務(wù)端數(shù)據(jù)的生成Demo,用作使用的參考
數(shù)據(jù)格式定義類似如下:
var threeSelectData={
"省份":{val:"",items:{"城市":{val:"",items:{"區(qū)縣":""}}}},
"beijing":{val:"01",items:{
"bj-01":{val:"0101",items:{
"bj-01-01":"010101"
}},
"bj-02":{val:"0102",items:{
"bj-02-01":"010201",
"bj-02-02":"010202"
}}
}},
"shanxi":{val:"02",items:{}},
"guangzhou":{val:"02",items:{}}
};
代碼例子:
<script type="text/javascript" src="../jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="areadata.js"></script>
<script type="text/javascript">
/*
通用三級(jí)聯(lián)動(dòng)說(shuō)明
參數(shù)配置如下,配置select的三個(gè)ID和默認(rèn)值就行,無(wú)默認(rèn)值填寫(xiě)為null
var defaults = {
s1:'Select1',
s2:'Select2',
s3:'Select3',
v1:null,
v2:null,
v3:null
};
*/
var defaults = {
s1:'Select1',
s2:'Select2',
s3:'Select3',
v1:120000,
v2:120200,
v3:120224
};
$(function(){
threeSelect(defaults);
});
function threeSelect(config){
var $s1=$("#"+config.s1);
var $s2=$("#"+config.s2);
var $s3=$("#"+config.s3);
var v1=config.v1?config.v1:null;
var v2=config.v2?config.v2:null;
var v3=config.v3?config.v3:null;
$.each(threeSelectData,function(k,v){
appendOptionTo($s1,k,v.val,v1);
});
$s1.change(function(){
$s2.html("");
$s3.html("");
if(this.selectedIndex==-1) return;
var s1_curr_val = this.options[this.selectedIndex].value;
$.each(threeSelectData,function(k,v){
if(s1_curr_val==v.val){
if(v.items){
$.each(v.items,function(k,v){
appendOptionTo($s2,k,v.val,v2);
});
}
}
});
if($s2[0].options.length==0){appendOptionTo($s2,"...","",v2);}
$s2.change();
}).change();
$s2.change(function(){
$s3.html("");
var s1_curr_val = $s1[0].options[$s1[0].selectedIndex].value;
if(this.selectedIndex==-1) return;
var s2_curr_val = this.options[this.selectedIndex].value;
$.each(threeSelectData,function(k,v){
if(s1_curr_val==v.val){
if(v.items){
$.each(v.items,function(k,v){
if(s2_curr_val==v.val){
$.each(v.items,function(k,v){
appendOptionTo($s3,k,v,v3);
});
}
});
if($s3[0].options.length==0){appendOptionTo($s3,"...","",v3);}
}
}
});
}).change();
function appendOptionTo($o,k,v,d){
var $opt=$("<option>").text(k).val(v);
if(v==d){$opt.attr("selected", "selected")}
$opt.appendTo($o);
}
}
</script>
<style type="text/css" media="screen">
select{width:80px;}
</style>
<select id="Select1" name="Select1"></select>
<select id="Select2" name="Select2"></select>
<select id="Select3" name="Select3"></select>
文字沒(méi)有詳細(xì)整理!懂點(diǎn)JS的就能看懂!
代碼打包下載
Email: shaoyun (at) yeah.net
Date: 2010-03-10 02:03
Blog: http://shaoyun.cnblogs.com/
用Jquery實(shí)現(xiàn),原始代碼只支持IE,這里我改了一下,我的代碼里面有三個(gè)版本的實(shí)現(xiàn)
第一個(gè)是通過(guò)讀取XML構(gòu)建,支持IE/firefox,chrome不支持,有興趣的可以將讀取XML的部分改成AJAX的方式,這樣chrome支持就不成問(wèn)題
第二個(gè)是采用Json數(shù)據(jù)格式構(gòu)建,是我的第二次嘗試改進(jìn)
第三個(gè)與第二個(gè)其實(shí)是一樣的,只不過(guò)將數(shù)據(jù)分離到JS文件中,我的代碼中有一個(gè)ASP文件,是調(diào)用數(shù)據(jù)庫(kù)生成Json省市區(qū)數(shù)據(jù)的,如果頁(yè)面直接調(diào)用ASP文件,速度會(huì)很慢,生成JS文件后直接調(diào)用就要快的多,而且這部分?jǐn)?shù)據(jù)一般不會(huì)改動(dòng)
更新記錄:
++2010-04-19 12:11:24
多加了一個(gè)插件的例子,其實(shí)不算插件,就是一函數(shù),為什么不寫(xiě)成插件,只是基于靈活性的考慮,
讓select可以放在頁(yè)面的任何位置,而不是局限在div、table、td等頁(yè)面元素內(nèi)
參數(shù)類似下面,s1/s2/s3配置select的id,v1/v2/v3為默認(rèn)值,如果不想設(shè)置請(qǐng)?jiān)O(shè)置為null,或者直接不設(shè)置
參數(shù)配置如下,配置select的三個(gè)ID和默認(rèn)值就行,無(wú)默認(rèn)值填寫(xiě)為null
復(fù)制代碼 代碼如下:
var defaults = {
s1:'Select1',
s2:'Select2',
s3:'Select3',
v1:null,
v2:null,
v3:null
};
這算是第四個(gè)例子,目錄下的php文件是服務(wù)端數(shù)據(jù)的生成Demo,用作使用的參考
數(shù)據(jù)格式定義類似如下:
復(fù)制代碼 代碼如下:
var threeSelectData={
"省份":{val:"",items:{"城市":{val:"",items:{"區(qū)縣":""}}}},
"beijing":{val:"01",items:{
"bj-01":{val:"0101",items:{
"bj-01-01":"010101"
}},
"bj-02":{val:"0102",items:{
"bj-02-01":"010201",
"bj-02-02":"010202"
}}
}},
"shanxi":{val:"02",items:{}},
"guangzhou":{val:"02",items:{}}
};
代碼例子:
復(fù)制代碼 代碼如下:
<script type="text/javascript" src="../jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="areadata.js"></script>
<script type="text/javascript">
/*
通用三級(jí)聯(lián)動(dòng)說(shuō)明
參數(shù)配置如下,配置select的三個(gè)ID和默認(rèn)值就行,無(wú)默認(rèn)值填寫(xiě)為null
var defaults = {
s1:'Select1',
s2:'Select2',
s3:'Select3',
v1:null,
v2:null,
v3:null
};
*/
var defaults = {
s1:'Select1',
s2:'Select2',
s3:'Select3',
v1:120000,
v2:120200,
v3:120224
};
$(function(){
threeSelect(defaults);
});
function threeSelect(config){
var $s1=$("#"+config.s1);
var $s2=$("#"+config.s2);
var $s3=$("#"+config.s3);
var v1=config.v1?config.v1:null;
var v2=config.v2?config.v2:null;
var v3=config.v3?config.v3:null;
$.each(threeSelectData,function(k,v){
appendOptionTo($s1,k,v.val,v1);
});
$s1.change(function(){
$s2.html("");
$s3.html("");
if(this.selectedIndex==-1) return;
var s1_curr_val = this.options[this.selectedIndex].value;
$.each(threeSelectData,function(k,v){
if(s1_curr_val==v.val){
if(v.items){
$.each(v.items,function(k,v){
appendOptionTo($s2,k,v.val,v2);
});
}
}
});
if($s2[0].options.length==0){appendOptionTo($s2,"...","",v2);}
$s2.change();
}).change();
$s2.change(function(){
$s3.html("");
var s1_curr_val = $s1[0].options[$s1[0].selectedIndex].value;
if(this.selectedIndex==-1) return;
var s2_curr_val = this.options[this.selectedIndex].value;
$.each(threeSelectData,function(k,v){
if(s1_curr_val==v.val){
if(v.items){
$.each(v.items,function(k,v){
if(s2_curr_val==v.val){
$.each(v.items,function(k,v){
appendOptionTo($s3,k,v,v3);
});
}
});
if($s3[0].options.length==0){appendOptionTo($s3,"...","",v3);}
}
}
});
}).change();
function appendOptionTo($o,k,v,d){
var $opt=$("<option>").text(k).val(v);
if(v==d){$opt.attr("selected", "selected")}
$opt.appendTo($o);
}
}
</script>
<style type="text/css" media="screen">
select{width:80px;}
</style>
<select id="Select1" name="Select1"></select>
<select id="Select2" name="Select2"></select>
<select id="Select3" name="Select3"></select>
文字沒(méi)有詳細(xì)整理!懂點(diǎn)JS的就能看懂!
代碼打包下載
您可能感興趣的文章:
- js實(shí)現(xiàn)下拉列表選中某個(gè)值的方法(3種方法)
- jquery用ajax方式從后臺(tái)獲取json數(shù)據(jù)后如何將內(nèi)容填充到下拉列表
- javaScript年份下拉列表框內(nèi)容為當(dāng)前年份及前后50年
- js獲取下拉列表框<option>中的value和text的值示例代碼
- javascript實(shí)現(xiàn)在下拉列表中顯示多級(jí)樹(shù)形菜單的方法
- extJs 文本框后面加上說(shuō)明文字+下拉列表選中值后觸發(fā)事件
- javascript級(jí)聯(lián)下拉列表實(shí)例代碼(自寫(xiě))
- javascript獲取下拉列表框當(dāng)中的文本值示例代碼
- 使用js實(shí)現(xiàn)一個(gè)可編輯的select下拉列表
- JavaScript實(shí)現(xiàn)下拉列表效果
相關(guān)文章
jquery中ajax使用error調(diào)試錯(cuò)誤的方法
這篇文章主要介紹了jquery中ajax使用error調(diào)試錯(cuò)誤的方法,實(shí)例分析了Ajax的使用方法與error函數(shù)調(diào)試錯(cuò)誤的技巧,需要的朋友可以參考下2015-02-02jquery html動(dòng)態(tài)添加的元素綁定事件詳解
下面小編就為大家?guī)?lái)一篇jquery html動(dòng)態(tài)添加的元素綁定事件詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05基于jQuery排序及應(yīng)用實(shí)現(xiàn)Tab欄特效
這篇文章主要介紹了基于jQuery排序及應(yīng)用實(shí)現(xiàn)Tab欄特效,jquery是基于JavaScript語(yǔ)言寫(xiě)出來(lái)的一個(gè)框架,它封裝JavaScript常用的功能代碼,提供一種簡(jiǎn)便的JavaScript設(shè)計(jì)模式,但實(shí)質(zhì)上還是js,所以JQuery也屬于網(wǎng)頁(yè)編程語(yǔ)言。下面更多內(nèi)容需要的小伙伴可以參考一下2022-03-03Mui使用jquery并且使用點(diǎn)擊跳轉(zhuǎn)新窗口的實(shí)例
下面小編就為大家?guī)?lái)一篇Mui使用jquery并且使用點(diǎn)擊跳轉(zhuǎn)新窗口的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08基于jQuery實(shí)現(xiàn)的單行公告活動(dòng)輪播效果
本文通過(guò)實(shí)例代碼給大家介紹了基于jQuery實(shí)現(xiàn)的單行公告活動(dòng)輪播效果,非常不錯(cuò),代碼簡(jiǎn)單易懂,具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-08-08Jquery Validation插件防止重復(fù)提交表單的解決方法
在項(xiàng)目開(kāi)發(fā)中,測(cè)試人員報(bào)告缺陷說(shuō),即時(shí)有表單驗(yàn)證,但是如果快速點(diǎn)擊兩下“提交”按鈕,系統(tǒng)會(huì)產(chǎn)生兩條相同的記錄。2010-03-03JQuery動(dòng)態(tài)添加Select的Option元素實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇JQuery動(dòng)態(tài)添加Select的Option元素實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08