一、简单的三级联动
1. 效果图
2. 设计思路
第一步:先绑定省的数据,根据省的数据绑定市的数据,再根据市的数据绑定区县的数据。 第二步:要是改变省的数据,后面两个数据全部清空重新选择,要是改变市的数据,县区的数据清空,重新选择。
3. 核心代码
< script>
var index1;
var index2;
var data1;
var data2;
var s1= document. getElementById ( "s-1" ) ;
var s2= document. getElementById ( "s-2" ) ;
var s3= document. getElementById ( "s-3" ) ;
window. onload = function ( ) {
addData ( city, s1) ;
s1. onchange = function ( ) {
console. log ( s2. options. length) ;
console. log ( this . value) ;
s2. options. length= 1 ;
s3. options. length= 1 ;
index1= this . value;
if ( index1) {
data1= city[ index1] . child;
console. log ( data1) ;
addData ( data1, s2) ;
}
}
s2. onchange = function ( ) {
console. log ( this . value) ;
index2= this . value;
s3. options. length= 1 ;
if ( index2) {
data2= data1[ index2] . child;
console. log ( data2) ;
addData ( data2, s3) ;
}
}
}
function addData ( data, parent ) {
for ( var i= 0 ; i< data. length; i++ )
{
var opt= new Option ( data[ i] . name, i) ;
parent. appendChild ( opt) ;
}
}
< / script>
二、复杂的三级联动
1. 效果图
2. 设计思路
第一步:先绑定省的数据,根据省的数据绑定市的数据,再根据市的数据绑定区县的数据。 第二步:点击选择省数据后该省名称变成红色,并且省的名在上方的框中显示,然后自动跳转到市的数据页面,选择市的数据后名称变红并且显示在上面的框中,最后自动跳转区县的页面,点击选择名称变红并且显示在框中。 第三步:点击上面框中的省、市、区县的数据出现对应的界面,并且数据可以重新选择。 第四步:要是重新选择省的数据,后面两个数据全部清空,重复第二步;要是改变市的数据,县区的数据清空,重复第二步。
3. 核心代码
< script>
var Data= citydata;
console. log ( Data) ;
window. onload = function ( ) {
var menu= document. getElementById ( "menu" ) ;
var tablist= document. getElementsByClassName ( "tab-list" ) [ 0 ] ;
var tabContent= document. getElementsByClassName ( "tab-m-bar" ) [ 0 ] ;
var tabBar= document. getElementsByClassName ( "tab-bar" ) ;
var defaultInfo = document. getElementsByClassName ( "default-info" ) [ 0 ] ;
var parTitle = document. getElementsByClassName ( "par-title" ) [ 0 ] ;
var ckSpan = document. getElementsByClassName ( "bar-info" ) ;
var item = [ ] ;
var saveIndex;
var savedefault;
var s1= 0 ;
var s2= 0 ;
var selectSpan;
tabContent. onclick = function ( e ) {
if ( e. target. nodeName. toLowerCase ( ) == 'span' ) {
if ( ! defaultInfo. classList. contains ( "hide" ) )
defaultInfo. classList. add ( 'hide' ) ;
if ( selectSpan)
selectSpan. classList. remove ( 'tab-s-ck' )
e. target. classList. add ( 'tab-s-ck' ) ;
selectSpan = e. target;
var nowIndex= e. target. getAttribute ( "data-index" ) ;
addEle ( e. target. innerText, saveIndex) ;
item[ saveIndex] = [ saveIndex++ , nowIndex] ;
item. splice ( saveIndex) ;
for ( var k= 0 ; k< ckSpan. length; k++ ) {
if ( k>= saveIndex) {
ckSpan[ k] . remove ( ) ;
k-- ;
}
}
if ( saveIndex> tabBar. length- 1 ) {
tablist. classList. add ( 'hide' ) ;
saveIndex= tabBar. length- 1 ;
}
if ( saveIndex>= tabBar. length)
return ;
tabBar[ saveIndex] . click ( ) ;
}
}
for ( var i= 0 ; i< tabBar. length; i++ )
{
tabBar[ i] . index = i;
tabBar[ i] . onclick = function ( ) {
if ( savedefault)
savedefault. classList. remove ( 'tab-bar-ck' ) ;
this . classList. add ( 'tab-bar-ck' ) ;
savedefault= this ;
saveIndex = this . index;
var nowHtml= null ;
switch ( saveIndex) {
case 0 :
nowHtml= EachData ( Data, 'name' , item[ 0 ] ) ;
break ;
case 1 :
if ( item[ 0 ] ) {
s1= item[ 0 ] [ 1 ] ;
nowHtml= EachData ( Data[ s1] . city, 'name' , item[ 1 ] ) ;
}
else {
nowHtml= "" ;
}
break ;
case 2 :
if ( item[ 1 ] ) {
s2= item[ 1 ] [ 1 ] ;
nowHtml= EachData ( Data[ s1] . city[ s2] . area, null , item[ 2 ] ) ;
}
else {
nowHtml= "" ;
}
break ;
}
tabContent. innerHTML = nowHtml;
}
}
function addEle ( txt, index ) {
if ( ckSpan[ index] ) {
ckSpan[ index] . innerText= txt+ ( index< 2 ? "/" : "" ) ;
return ;
}
var ckspan= document. createElement ( "span" ) ;
ckspan. innerText= txt+ ( index< 2 ? "/" : "" ) ;
ckspan. className= "bar-info" ;
ckspan. index= index;
ckspan. addEventListener ( "click" , function ( ) {
tablist. classList. remove ( 'hide' ) ;
tabBar[ this . index] . click ( ) ;
} )
parTitle. appendChild ( ckspan) ;
}
menu. onclick = function ( ) {
if ( tablist. classList. contains ( 'hide' ) ) {
tablist. classList. remove ( 'hide' ) ;
this . classList. add ( "icon-shangjiantou" ) ;
}
else {
tablist. classList. add ( 'hide' ) ;
this . classList. remove ( "icon-shangjiantou" ) ;
}
}
tabBar[ 0 ] . click ( ) ;
}
function EachData ( params, args, dfck ) {
var str = "" ;
for ( var index in params) {
str += "<span class='tab-s-name " + ( dfck && dfck[ 1 ] == index ? 'tab-s-ck' : '' ) + "' data-index='" + index + "'>" + ( args ?
params[ index] [ args] : params[ index] ) + "</span>" ;
}
return str;
}
< / script>