可支援任意級選取器級聯的控制項函數

來源:互聯網
上載者:User

標籤:前端   html   js   級聯   

【要求】

提供資料1:

[    {        text:'第一級'        value:'1',        list:[            {                text:'第二級'                value:'1.1',                list:[                    {                        text:'第三級'                        value:'1.1.1',                        list:[]                    },                    ...                ]            },            ...        ]    },    ...]
資料2:

<pre name="code" class="javascript">依次級聯的選取器元素列表<span style="font-family: Arial, Helvetica, sans-serif;">selectList,如[select1,select2,select3,...]</span>


【關鍵代碼】

function cascade(selectList,data){    // 這裡selectList為依次級聯的選取器元素列表,如[select1,select2,select3,...]    // TODO    for(var i=0;i<selectList.length;i++){    var temp_data=data;    for(var j=0;j<i;j++){    temp_data=temp_data[0].list;    }    fillSelect(selectList[i],temp_data);    //增加變更事件    selectList[i].addEventListener(    "change",function(event){    var value=event.target.value;    var v_p=value.split(".");    var v_length=v_p.length;    //如果是最後一個select就跳出    if(v_length>=selectList.length)return;      //構造新的選取器    var newSelectList=[];    for(var j=v_length;j<selectList.length;j++)    newSelectList.push(selectList[j]);    //alert(newSelectList.length);    //構造新的資料    var newData=data;    for(var j=0;j<v_p.length;j++){    newData=newData[parseInt(v_p[j])-1].list;    }    console.log(newSelectList);    console.log(newData);    cascade(newSelectList,newData);    }    );    }    }//更新selectfunction fillSelect(select,list){select.innerHTML="";list.forEach(function(data){var option=new Option(data.text,data.value);select.add(option);});}

【代碼實現】

<!DOCTYPE html><html><head><meta charset="UTF-8"><title></title></head><body>  <select name="select1" id="select1"></select>  <select name="select2" id="select2"></select>  <select name="select3" id="select3"></select><p style="white-space:pre; font-size:1em; font-weight:bold;">data =[{text:"1",value:"1",list:[{text:"11",value:"1.1",list:[{text:"111",value:"1.1.1"},{text:"112",value:"1.1.2"},{text:"113",value:"1.1.3"}]},{text:"12",value:"1.2",list:[{text:"121",value:"1.2.1"},{text:"122",value:"1.2.2"}]}]},{text:"2",value:"2",list:[{text:"21",value:"2.1",list:[{text:"211",value:"2.1.1"},{text:"212",value:"2.1.2"},{text:"213",value:"2.1.3"}]},{text:"22",value:"2.2",list:[{text:"221",value:"2.2.1"},{text:"222",value:"2.2.2"}]}]}];</p></body></html><script>var data=[{text:"1",value:"1",list:[{text:"11",value:"1.1",list:[{text:"111",value:"1.1.1"},{text:"112",value:"1.1.2"},{text:"113",value:"1.1.3"}]},{text:"12",value:"1.2",list:[{text:"121",value:"1.2.1"},{text:"122",value:"1.2.2"}]}]},{text:"2",value:"2",list:[{text:"21",value:"2.1",list:[{text:"211",value:"2.1.1"},{text:"212",value:"2.1.2"},{text:"213",value:"2.1.3"}]},{text:"22",value:"2.2",list:[{text:"221",value:"2.2.1"},{text:"222",value:"2.2.2"}]}]}];var select1=document.getElementById("select1");var select2=document.getElementById("select2");var select3=document.getElementById("select3");var selectList=[select1,select2,select3];    cascade(selectList,data);function cascade(selectList,data){    // 這裡selectList為依次級聯的選取器元素列表,如[select1,select2,select3,...]    // TODO    for(var i=0;i<selectList.length;i++){    var temp_data=data;    for(var j=0;j<i;j++){    temp_data=temp_data[0].list;    }    fillSelect(selectList[i],temp_data);    //增加變更事件    selectList[i].addEventListener(    "change",function(event){    var value=event.target.value;    var v_p=value.split(".");    var v_length=v_p.length;    //如果是最後一個select就跳出    if(v_length>=selectList.length)return;      //構造新的選取器    var newSelectList=[];    for(var j=v_length;j<selectList.length;j++)    newSelectList.push(selectList[j]);    //alert(newSelectList.length);    //構造新的資料    var newData=data;    for(var j=0;j<v_p.length;j++){    newData=newData[parseInt(v_p[j])-1].list;    }    console.log(newSelectList);    console.log(newData);    cascade(newSelectList,newData);    }    );    }    }//更新selectfunction fillSelect(select,list){select.innerHTML="";list.forEach(function(data){var option=new Option(data.text,data.value);select.add(option);});}</script>



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

可支援任意級選取器級聯的控制項函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.