码迷,mamicode.com
首页 > 其他好文 > 详细

可支持任意级选择器级联的控件函数

时间:2015-07-13 14:07:18      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:前端   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);
    			}
    		);
    	}
    	
	}
	//更新select
	function 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);
    			}
    		);
    	}
    	
	}
	//更新select
	function fillSelect(select,list){
		select.innerHTML="";
		
		list.forEach(function(data){
			var option=new Option(data.text,data.value);
			select.add(option);
		});
	}

</script>



版权声明:本文为博主原创文章,未经博主允许不得转载。

可支持任意级选择器级联的控件函数

标签:前端   html   js   级联   

原文地址:http://blog.csdn.net/willspace/article/details/46861135

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!