jQuery-Citys省市區(qū)三級(jí)菜單聯(lián)動(dòng)插件使用詳解
前言
這里分享一個(gè)博主寫的省市區(qū)三級(jí)菜單聯(lián)動(dòng)插件 — jQuery-Citys,此插件中所有省市區(qū)數(shù)據(jù)均為國家行政區(qū)劃代碼,保證數(shù)據(jù)真實(shí)可靠,插件可以根據(jù)默認(rèn)地區(qū)代碼或地區(qū)名稱進(jìn)行值的初始化操作。
線上演示地址
github地址
演示截圖(查看演示效果請(qǐng)點(diǎn)擊上方鏈接):

插件邏輯
這個(gè)插件的邏輯主要是根據(jù)區(qū)劃代碼來進(jìn)行省市區(qū)的篩選以及分類,因?yàn)閰^(qū)劃代碼的特殊排序博主在里面使用了一些正則來劃分不同的省份以及地區(qū),然后通過對(duì)三級(jí)菜單綁定不同的事件來響應(yīng)省市區(qū)變化的聯(lián)動(dòng)效果。
源碼解析
這里只展示部分相關(guān)源碼,更多源碼可以訪問博主的github地址進(jìn)行下載查看。
首先是定義各項(xiàng)參數(shù):
var _options = $.extend({
url : 'js/jquery-citys.json', //省市區(qū)json數(shù)據(jù)地址
patternPro : /\d{2}0000/, //初始化正則匹配省數(shù)據(jù)
patternCity : /1101\d{2}/, //初始化正則匹配市數(shù)據(jù)
type : 'code', //下拉框值的類型,code行政區(qū)劃代碼,name地名
code: 0, //地區(qū)編碼
province : '', //省份(省級(jí)),可以為地區(qū)編碼或者名稱
city : '', //城市(地級(jí)),可以為地區(qū)編碼或者名稱
area : '', //地區(qū)(縣區(qū)級(jí)),可以為地區(qū)編碼或者名
selState : 0, //聯(lián)動(dòng)級(jí)別判斷值,二級(jí)聯(lián)動(dòng)狀態(tài)值為0,三級(jí)為1
selProvince : "province", //省份、直轄市列表框name
selCity : "city", //城市、區(qū)列表框name
selArea : "area", //區(qū)、縣列表框name
}, options);
var proHtml = '', //省份html數(shù)據(jù)
cityHtml = '', //城市html數(shù)據(jù)
areaHtml = '', //地區(qū)html數(shù)據(jù)
_this = $(this), //指向調(diào)用插件對(duì)象
citys = '', //省市區(qū)json數(shù)據(jù)
patternPro = _options.patternPro, //初始化正則匹配省數(shù)據(jù)
patternCity = _options.patternCity, //初始化正則匹配市數(shù)據(jù)
type = _options.type, //下拉框值的類型,code行政區(qū)劃代碼,name地名
code = _options.code, //地區(qū)編碼
province = _options.province, //省份(省級(jí)),可以為地區(qū)編碼或者名稱
city = _options.city, //城市(地級(jí)),可以為地區(qū)編碼或者名稱
area = _options.area, //地區(qū)(縣區(qū)級(jí)),可以為地區(qū)編碼或者名
selState = _options.selState, //聯(lián)動(dòng)級(jí)別判斷值,二級(jí)聯(lián)動(dòng)狀態(tài)值為0,三級(jí)為1
$selProvince = _this.find('select[name="'+ _options.selProvince +'"]'), //省份、直轄市列表框name
$selCity = _this.find('select[name="'+ _options.selCity +'"]'), //城市、區(qū)列表框name
$selArea = _this.find('select[name="'+ _options.selArea +'"]'); //區(qū)、縣列表框name
獲取省市區(qū)json數(shù)據(jù):
$.getJSON(_options.url,function(data){
citys = data;
//執(zhí)行初始化命令
init();
})
初始化命令:
var init = function(){
//初始化默認(rèn)數(shù)據(jù)
proHtml = "<option> - 請(qǐng)選擇 - </option>";
cityHtml = "<option> - 請(qǐng)選擇 - </option>";
for(var i in citys){
if(patternPro.test(i)){ //添加一級(jí)列表數(shù)據(jù)
proHtml += "<option value=""+(type=="code"?i:citys[i])+"" data-code=""+ i +"">"+ citys[i] +"</option>";
}
}
//渲染省份一級(jí)列表
$selProvince.html(proHtml);
//渲染城市二級(jí)列表
$selCity.html(cityHtml);
//默認(rèn)隱藏區(qū)三級(jí)列表
$selArea.hide();
//填寫地區(qū)編碼時(shí),利用編碼定位
if(type == 'code' && code){
var c = code - code%1e4;
province = c;
c = code - (code%1e4 ? code%1e2 : code);
city = c;
c = code%1e2 ? code : 0;
area = c;
}
//添加默認(rèn)初始值
$selProvince.find('option').each(function(){
if(type == 'code' && province != ''){
if(province == $(this).data('code')){
$(this).attr('selected',true);
changeProvince($(this).data('code'));
}
}else if(type == 'name' && province != ''){
if(province == $(this).val()){
$(this).attr('selected',true);
changeProvince($(this).data('code'));
}
}
})
$selCity.find('option').each(function(){
if(type == 'code' && city != ''){
if(city == $(this).data('code')){
$(this).attr('selected',true);
changeCity($(this).data('code'));
}
}else if(type == 'name' && city != ''){
if(city == $(this).val()){
$(this).attr('selected',true);
changeCity($(this).data('code'));
}
}
})
$selArea.find('option').each(function(){
//三級(jí)聯(lián)動(dòng)時(shí),匹配對(duì)應(yīng)地區(qū)
if(selState == 1){
if(type == 'code' && area != ''){
if(area == $(this).data('code')){
$(this).attr('selected',true);
}
}else if(type == 'name' && area != ''){
if(area == $(this).val()){
$(this).attr('selected',true);
}
}
}
})
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- jquery+php后臺(tái)實(shí)現(xiàn)省市區(qū)聯(lián)動(dòng)功能示例
- 使用PHP+MySql+Ajax+jQuery實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)功能示例
- jquery+ajax實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)(封裝和不封裝兩種方式)
- jQuery ajax實(shí)現(xiàn)省市縣三級(jí)聯(lián)動(dòng)
- jQuery實(shí)現(xiàn)的省市聯(lián)動(dòng)菜單功能示例【測試可用】
- 省市區(qū)三級(jí)聯(lián)動(dòng)jquery實(shí)現(xiàn)代碼
- jQuery+jsp實(shí)現(xiàn)省市縣三級(jí)聯(lián)動(dòng)效果(附源碼)
- JQuery省市聯(lián)動(dòng)效果實(shí)現(xiàn)過程詳解
相關(guān)文章
純jquery實(shí)現(xiàn)模仿淘寶購物車結(jié)算
在淘寶購物,需要把商品加入購車,其中包含全選、單選金額改變,當(dāng)增加商品時(shí)金額也會(huì)相應(yīng)的發(fā)生變化,下面通過本文給大家分享純jquery實(shí)現(xiàn)模仿淘寶購物車結(jié)算,需要的朋友可以參考下2015-08-08
jsonp跨域請(qǐng)求數(shù)據(jù)實(shí)現(xiàn)手機(jī)號(hào)碼查詢實(shí)例分析
這篇文章主要介紹了jsonp跨域請(qǐng)求數(shù)據(jù)實(shí)現(xiàn)手機(jī)號(hào)碼查詢的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了jsonp跨域請(qǐng)求數(shù)據(jù)的原理與查詢號(hào)碼的應(yīng)用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-12-12
javascript開發(fā)中使用onpropertychange,oninput事件解決onchange事件的不足
用onpropertychange,oninput事件解決onchange事件的不足,需要的朋友可以參考下。2010-11-11
使用JQuery快速實(shí)現(xiàn)Tab的AJAX動(dòng)態(tài)載入(實(shí)例講解)
這篇文章主要介紹了使用JQuery快速實(shí)現(xiàn)Tab的AJAX動(dòng)態(tài)載入(實(shí)例講解)需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12
使用jQuery的ajax功能實(shí)現(xiàn)的RSS Reader 代碼
Rss閱讀器挺不錯(cuò)的。我覺得如果在igoogle或是dropthings這種形式的portal下來放很多RSS模塊顯示自己每天需要關(guān)注的信息那將會(huì)減少大家很多的打開瀏覽器和輸入網(wǎng)址的時(shí)間。2009-09-09
運(yùn)用jquery實(shí)現(xiàn)table單雙行不同顯示并能單行選中
(該方法是對(duì)《運(yùn)用jquery實(shí)現(xiàn)(table)單雙行不同顯示并能多行選中》的改進(jìn),適合于單行選擇)2009-07-07

