基于JS實(shí)現(xiàn)省市聯(lián)動(dòng)效果代碼分享
在日常項(xiàng)目開發(fā)階段經(jīng)常見到下拉框二級(jí)聯(lián)動(dòng)效果,尤其是涉及地區(qū)、品種等有多級(jí)選項(xiàng)時(shí)。比如說:常見的省市聯(lián)動(dòng)下拉框,在選擇省份時(shí),城市列表也會(huì)更隨改變。
思路:
1,所謂聯(lián)動(dòng)效果,是指出發(fā)父級(jí)的數(shù)據(jù)變化時(shí),會(huì)影響到關(guān)聯(lián)性子級(jí)數(shù)據(jù)元素的變化。
下面是造的省市的數(shù)據(jù):
var linkDatas = { provinces:[ { "code":"0", "name":"請(qǐng)選擇" }, { "code":"1", "name":"北京" }, { "code":"2", "name":"天津" }, { "code":"3", "name":"河北" }, { "code":"4", "name":"湖北" }, { "code":"5", "name":"廣東" }, { "code":"6", "name":"其他" } ], citys:{ 0:[ "請(qǐng)選擇" ], 1:[ "朝陽區(qū)", "海淀區(qū)", "東城區(qū)", "西城區(qū)", "房山區(qū)", "其他" ], 2:[ "天津" ], 3:[ "滄州", "石家莊", "秦皇島", "其他" ], 4:[ "武漢市", "宜昌市", "襄樊市", "其他" ], 5:[ "廣州市", "深圳市", "汕頭市", "佛山市", "珠海市", "其他" ], 6:[ "其他" ] } };
2,根據(jù)數(shù)據(jù)動(dòng)態(tài)生成option節(jié)點(diǎn):
function addOptions(target,options){ var optionEle = null, target = target, option = options, optionLen = options.length; for(var i = 0;i < optionLen;i++){ optionEle = document.createElement('option'); optionEle.value = option[i].value; optionEle.text = option[i].text; target.options.add(optionEle); } }
3,根據(jù)上述省市數(shù)據(jù),其中code代表“省級(jí)”指向“城市”的標(biāo)識(shí)符,當(dāng)省級(jí)的數(shù)據(jù)變更時(shí),出發(fā)change事件:
pro.onchange = function(){ console.log(this); var ct = city[this.value], ctLen = ct.length, ctBox = []; c.innerHTML = ""; /*添加城市*/ for(var j = 0;j < ctLen;j++){ ctBox.push({ "text" : ct[j], "value": ct[j] }); } addOptions(c,ctBox); }
HTML代碼:
<div class="content"> <h3>下拉框聯(lián)動(dòng)效果</h3> <p>省份: <select name="provinces" id="provinces"> </select> </p> <p> 市: <select name="citys" id="citys"> </select> </p> </div>
全部JavaScript代碼:
var linkDatas = { provinces:[ { "code":"0", "name":"請(qǐng)選擇" }, { "code":"1", "name":"北京" }, { "code":"2", "name":"天津" }, { "code":"3", "name":"河北" }, { "code":"4", "name":"湖北" }, { "code":"5", "name":"廣東" }, { "code":"6", "name":"其他" } ], citys:{ 0:[ "請(qǐng)選擇" ], 1:[ "朝陽區(qū)", "海淀區(qū)", "東城區(qū)", "西城區(qū)", "房山區(qū)", "其他" ], 2:[ "天津" ], 3:[ "滄州", "石家莊", "秦皇島", "其他" ], 4:[ "武漢市", "宜昌市", "襄樊市", "其他" ], 5:[ "廣州市", "深圳市", "汕頭市", "佛山市", "珠海市", "其他" ], 6:[ "其他" ] } }; function addOptions(target,options){ var optionEle = null, target = target, option = options, optionLen = options.length; for(var i = 0;i < optionLen;i++){ optionEle = document.createElement('option'); optionEle.value = option[i].value; optionEle.text = option[i].text; target.options.add(optionEle); } } function provincesCitysLink(pro,c){ var LD = linkDatas, provinces = LD.provinces, city = LD.citys, initCity = city[0], proBox = []; /*添加省份*/ for(var i = 0;i < provinces.length;i++){ proBox.push({ "text" : provinces[i].name, "value": provinces[i].code }) } addOptions(pro,proBox); /*初始化城市*/ addOptions(c,[{ "text" : initCity, "value": initCity }]); /*添加聯(lián)動(dòng)事件*/ pro.onchange = function(){ console.log(this); var ct = city[this.value], ctLen = ct.length, ctBox = []; c.innerHTML = ""; /*添加城市*/ for(var j = 0;j < ctLen;j++){ ctBox.push({ "text" : ct[j], "value": ct[j] }); } addOptions(c,ctBox); } } var provinces = document.getElementById('provinces'), citys = document.getElementById('citys'); provincesCitysLink(provinces,citys);
- 基于JavaScript實(shí)現(xiàn)省市聯(lián)動(dòng)效果
- JavaScript實(shí)現(xiàn)省市聯(lián)動(dòng)效果
- JavaScript實(shí)現(xiàn)省市聯(lián)動(dòng)過程中bug的解決方法
- js省市聯(lián)動(dòng)效果完整實(shí)例代碼
- JSON+HTML實(shí)現(xiàn)國家省市聯(lián)動(dòng)選擇效果
- JavaScript二維數(shù)組實(shí)現(xiàn)的省市聯(lián)動(dòng)菜單
- JavaScript省市聯(lián)動(dòng)實(shí)現(xiàn)代碼
- js實(shí)現(xiàn)省市聯(lián)動(dòng)效果的簡單實(shí)例
- javascript 09年最新版的省市聯(lián)動(dòng)
- JavaScript實(shí)現(xiàn)簡單省市聯(lián)動(dòng)
相關(guān)文章
使用TextRange獲取輸入框中光標(biāo)的位置的代碼
使用TextRange獲取輸入框中光標(biāo)的位置的代碼...2007-03-03JavaScript實(shí)現(xiàn)星級(jí)評(píng)價(jià)效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)星級(jí)評(píng)價(jià)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05Javascript基礎(chǔ)之?dāng)?shù)組的使用
這篇文章主要介紹了Javascript基礎(chǔ)之?dāng)?shù)組的使用的相關(guān)資料,介紹的非常詳解,具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-05-05js中eval()函數(shù)和trim()去掉字符串左右空格應(yīng)用
對(duì)于js中eval()函數(shù)的理解和寫一個(gè)函數(shù)trim()去掉字符串左右空格;對(duì)于js中eval()函數(shù)的理解是本人心得不一定正確,感興趣的朋友參考下,或許對(duì)你學(xué)習(xí)eval()函數(shù)有所幫助2013-02-02理解Javascript_15_作用域分配與變量訪問規(guī)則,再送個(gè)閉包
在閱讀本博文之前,請(qǐng)先閱讀《理解Javascript_13_執(zhí)行模型詳解》 在'執(zhí)行模型詳解'中講到了關(guān)于作用域分配的問題,這一篇博文將詳細(xì)的說明函數(shù)對(duì)象、作用域鏈與執(zhí)行上下文的關(guān)系。2010-10-10深入剖析JavaScript中的函數(shù)currying柯里化
下面小編就為大家?guī)硪黄钊肫饰鯦avaScript中的函數(shù)currying柯里化。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過來看看吧2016-04-04JS自定義函數(shù)實(shí)現(xiàn)時(shí)間戳轉(zhuǎn)換成date的方法示例
這篇文章主要介紹了JS自定義函數(shù)實(shí)現(xiàn)時(shí)間戳轉(zhuǎn)換成date的方法,結(jié)合具體實(shí)例形式分析了javascript時(shí)間戳與日期格式的計(jì)算與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-08-08