Js实现下拉复选功能

Js实现下拉复选功能

   推荐一个很好用的js实现下拉复选框的功能,纯js实现的,不需要引入样式表,使用起来方便快捷。

   代码如下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Js实现下拉复选功能</title>
</head>
<body>
<span style="width:200px;height:20px;overflow:hidden;">
	<input type="text" id="selectButton" onclick="myclick();" readonly="true" style="width:200px;height:20px;font-size:12px;"></inut>
</span>


<span id="selectdiv" style="display:none;border:1px solid #A9A9A9;width:200px;overflow-y :scroll;height:65px;background-color:white;font-size:12px; "
		onMouseOver="mousein()" onMouseOut="mouseout()"> 
</span>
 
</body>
<script type="text/javascript">
	
	//下拉框的数据,视讯编号/视讯名称
	var initlist = ['001/点播视讯','002/直播视讯','003/咪咕视讯'];
	
	//多选下拉框所在的div
	var selecteddiv = document.getElementById("selectdiv");
	
	//鼠标是否在【多选下拉框div】上面(如果在div上面,需要控制鼠标的点击事件,不让div隐藏;否则要让该div隐藏)
	var indiv = false;
	
	//模糊查询input
	var fuzzysearchinput = document.getElementById("fuzzysearch");
	
	//选中的视讯类型(需要传到后台的参数)
	var selectedlist = [];
	//选中的视讯名称(展示在前台给业务员看的)

	//var selectednamelist = ['点播视讯'];
	var selectednamelist = [];
	
	window.onload = function(){
		
		//动态创建所有的checkbox元素
		for(var i = 0; i < initlist.length; i++){
			var tmpdiv = document.createElement("div");
			var tmpinput = document.createElement("input");
			tmpinput.setAttribute("name","mycheckbox");
			tmpinput.setAttribute("type","checkbox");
			tmpinput.setAttribute("onclick","mycheck(this)");
			tmpinput.setAttribute("value",initlist[i].substr(0,initlist[i].indexOf("/")));

			
			var tmptext = document.createTextNode(initlist[i].substr(initlist[i].indexOf("/")+1,initlist[i].length));
			
			tmpdiv.appendChild(tmpinput);
			tmpdiv.appendChild(tmptext);
		//	tmpinput.setAttribute("checked","checked");			
			selecteddiv.appendChild(tmpdiv);
	    			
		}
		
		
		//鼠标点击事件,如果点击在 selectedbutton,或者是在多选框div中的点击事件,不作处理。其他情况的点击事件,将多选空div隐藏
		document.onclick=function(event){
			if(event.target.id=="selectButton" || indiv){
				return;
			}
			selecteddiv.style.display="none";
			document.getElementById("fuzzysearchdiv").style.display="none";
		};
		
		// 设法循环点击 checkbox 使之触发全选   	
		   defaultChecked();
	    
		// 页面加载时 循环遍历 生成初始化默认选择checkbox
		   function defaultChecked(){
		       for(var i = 0; i < initlist.length; i++){
		          //   alert('i======'+i);
		       }
		   }
		   
		
	};
	
	//点击selectButton,展示多选框
	function myclick (){
		//document.getElementById("fuzzysearchdiv").style.display="block";
		selecteddiv.style.display="block";
	}
	
	//鼠标进入多选框的div【selectdiv】
	function mousein(){
		indiv = true;
	}
	
	//鼠标离开多选框的div【selectdiv】
	function  mouseout(){
		indiv = false;
	}
	
	//checkbox的点击事件
	function mycheck(obj){	
	
		if(obj.checked){
			selectedlist.push(obj.value);
			selectednamelist.push(obj.nextSibling.nodeValue);
		}else{
			for(var i = 0; i < selectedlist.length; i++){
				if(selectedlist[i] == obj.value){
					selectedlist.splice(i,1);
					selectednamelist.splice(i,1);
				}
			}
		}
		document.getElementById("selectButton").value=selectednamelist;
	}
	
	//模糊查询
	function myfuzzysearch(){
		var checkboxlist = document.getElementsByName("mycheckbox");
		for(var i = 0; i < checkboxlist.length; i++){
			if(checkboxlist[i].nextSibling.nodeValue.indexOf(fuzzysearchinput.value) == -1){
				checkboxlist[i].parentNode.style.display = "none";
			}else{
				checkboxlist[i].parentNode.style.display = "block";
			}
		}
	}
	
 
</script>
 
</html>

  实现效果如下:

本人在使用的使用,使用了Set集合可以更方便的联动控制复选框的js触发方法。

 

 

  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值