带chekcbox功能的下拉框

antd多选下拉框一行展示的实现方式 我们都知道antd的select多选时,如果下拉框宽度不足,则自动浮动到下一行将下拉框撑大,但是这回影响到页面的整体布局。 我们期望的效果是,下拉框只显示一行的值,超出一行的部分自动隐藏。 下面有2种方案来实现这个效果。 1.利用浮动原理 设置下拉框的最大高度为一行的高度,然后超出的部分隐藏。 .ant-select-selection--multiple { max-height: 32px; overflow: hidden; } 这种方式存在的弊端是如果有2个选项,一个很短一个很长,那么只能看到很短的值,长值被隐藏,会剩余很大的空白。 2.flex布局 立即下载

最近在做项目中需要用到带Checkbxo的下拉框,如下图所示:

HTML页面代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>带全选功能的下拉框</title>
<style type="text/css">
	.checkboxselect-container{border:1px solid #33CCFF;
		//visibility:visible;
		visibility:hidden;
		background:white;}
	.checkboxselect-item{padding:3px 2px;}
	.checkboxselect-active{background:#33CCFF;color:white;padding:3px 2px;}	
</style>
<script type="text/javascript" src="checkboxSelect.js"></script>
<script type="text/javascript">
	window.onload = function(){	
		var checkboxSelect = new CheckboxSelect({
			input:document.getElementById('checkboxSelect'),
			hiddeninput:document.getElementById('hiddencheckboxSelect'),
			width:150,
			opacity:0.9,
			data:['北京','上海','南京'],
		});		
	}
</script>
</head>
<body>
	所选地区:<input type="text" id="checkboxSelect" name="checkboxSelect" style="width: 250px;"></input>
	所选地区所对应的ID值:<input type="text" id="hiddencheckboxSelect" name="hiddencheckboxSelect" style="width:250px;"></input>
	<br/>
</body>
</html>
checkboxSelect.js代码:
/**
 * JavaScript CheckboxSelect v0.1
 * Copyright (c) 2012 fly2004jun
 * Blog: http://blog.youkuaiyun.com/fly2004jun
 * Date: 2012-07-02
 * Licensed under the MIT:http://www.opensource.org/licenses/mit-license.php
 * 转载请保留原始版权信息
 * 
 * 描述:模仿select,对下拉选项添加Checkbox框。
 * new CheckboxSelect({
 * 	  input 		HTMLInputElement 必选,需要绑定的input
 * 	  hiddeninput   HTMLInputElement 可选,需要接收所勾选项id的input,为通过AJAX获取键值对准备 v0.2实现
 * 	  data 			Array ['北京','上海','安徽','吉林'] 必选
 * 	  containerCls	容器className 可选,默认值checkboxselect-container
 * 	  itemCls		容器子项className 可选,默认值checkboxselect-item
 * 	  activeCls		高亮子项className 可选,默认值checkboxselect-active
 * 	  width 		宽度设置 此项将覆盖containerCls的width 可选
 *    opacity		透明度设置 此项将覆盖containerCls的opacity 可选
 *    arrayUrl		通过Url获取数组格式数据,v0.2实现
 *    jsonUrl		通过Url获取JSON格式数据,v0.2实现
 * });
 */
 
Array.prototype.indexOf = function(val) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == val) return i;
    }
    return -1;
};
Array.prototype.remove = function(val) {
    var index = this.indexOf(val);
    if (index > -1) {
        this.splice(index, 1);
    }
};
 
 /**
 *
 * CheckboxSelect构造类
 */
function CheckboxSelect(opt){
	this.win = null;   
	this.doc = null;	
	this.container = null;
	this.items = null;
	this.input = opt.input || null;
	this.hiddeninput = opt.hiddeninput || null;
	this.containerCls = opt.containerCls || 'checkboxselect-container';
	this.itemCls = opt.itemCls || 'checkboxselect-item';
	this.activeCls = opt.activeCls || 'checkboxselect-active';
	this.width = opt.width;
	this.opacity = opt.opacity;
	this.data = opt.data || [];
	this.checkboxdata = [];  //数组保存选中项的值
	this.arrayUrl = opt.arrayUrl || null;
	this.jsonUrl = opt.jsonUrl || null;
	this.active = null;
	this.visible = false;
	this.init();
}

CheckboxSelect.prototype = {
	init: function(){
		this.win = window;
		this.doc = window.document;
		//构造一个DIV元素
		this.container = this.$C('div');
		//设置div的样式
		this.attr(this.container, 'class', this.containerCls);
		//将div附在DOM文档中
		this.doc.body.appendChild(this.container);
		//设置div属性
		this.setPos();
		var _this = this, input = this.input,container = this.container;	
		this.on(input,'click',function(e){
			_this.onClick(e);
		});		
		this.onMouseover();
		this.onMousedown();
		// blur会在click前发生,元素失去焦点
		this.on(container,'blur',function(e){
			_this.hide();			
		});			
	},
	$C: function(tag){
		return this.doc.createElement(tag);
	},
	getPos: function (el){
		var pos=[0,0], a=el;
		//获取页面元素的位置
		if(el.getBoundingClientRect){
			//左、上、右、下
			var box = el.getBoundingClientRect();
			pos=[box.left,box.top];
		}else{
			//遍历根元素
			while(a && a.offsetParent){
				pos[0] += a.offsetLeft;
				pos[1] += a.offsetTop;
				a = a.offsetParent
			}			
		}
		return pos;
	},	
	setPos: function(){
		var input = this.input,
			//获得当前input元素所在位置坐标。
			pos = this.getPos(input), 
			//获得浏览器类型
			brow = this.brow, 
			//获得宽度
			width = this.width,
			//获得透明度
			opacity = this.opacity,
			//获得新增的div元素
			container = this.container;
			//直接付给他CSS样式省去了定义CSS的步骤
			container.style.cssText =
				'position:absolute;overflow:hidden;background:white;left:' 
				+ pos[0] + 'px;top:'
				//offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
				+ (pos[1]+input.offsetHeight) + 'px;width:'
				// IE6/7/8/9/Chrome/Safari input[type=text] border默认为2,Firefox为1,因此取offsetWidth-2保证与FF一致
				+ (brow.firefox ? input.clientWidth : input.offsetWidth-2) + 'px;';
		if(width){
			container.style.width = width + 'px';
		}
		if(opacity){
            if(this.brow.ie){
                container.style.filter = 'Alpha(Opacity=' + opacity * 100 + ');';
            }else{
                container.style.opacity = (opacity == 1 ? '' : '' + opacity);
            }			
		}
	},
	show: function(){
		this.container.style.visibility = 'visible';
		this.visible = true;
	},
	hide: function(){
		this.container.style.visibility = 'hidden';
		this.visible = false;	
	},
	attr: function(el, name, val){
		if(val === undefined){
			return el.getAttribute(name);
		}else{
			el.setAttribute(name,val);
			name=='class' && (el.className = val);	
		}
	},
    on: function(el, type, fn){
    	el.addEventListener ? el.addEventListener(type, fn, false) : el.attachEvent('on' + type, fn);
    },
    un: function(el, type, fn){
    	el.removeEventListener ? el.removeEventListener(type, fn, false) : el.detachEvent('on' + type, fn);
    },
	brow: function(ua){
		return {
			ie: /msie/.test(ua) && !/opera/.test(ua),
			opera: /opera/.test(ua),
			firefox: /firefox/.test(ua)
		};
	}(navigator.userAgent.toLowerCase()),
	createXMLHttpRequest: function(){  
		if (window.ActiveXObject) {  
			return  new ActiveXObject("Microsoft.XMLHTTP");  
		}  
		else if (window.XMLHttpRequest) {  
			return new XMLHttpRequest();  
		}  
	},	
	onClick:function(e){
		var container = this.container, input = this.input, iCls = this.itemCls, aCls = this.activeCls,checkboxdata = this.checkboxdata ,hiddeninput = this.hiddeninput;
		this.win = window; 
		this.doc = window.document;
		this.items = [];
		if(this.data.length>0){
			this.container.innerHTML = '';
			//循环增加子项并设置样式
			for(var i=0,len=this.data.length;i<len;i++){
				var item = this.$C('div');
				this.attr(item, 'class', this.itemCls);
				var tempinput = this.$C('input');
				tempinput.type = 'checkbox';
				tempinput.value = this.data[i];
				this.on(tempinput,'click',function(e){
					var target = e.target || e.srcElement;
					if(target.checked){
						checkboxdata.push(target.value);
						input.value = checkboxdata.toString();
						if(hiddeninput)
							hiddeninput.value = checkboxdata.toString();
					}else{
						if(checkboxdata.length>0)
							checkboxdata.remove(target.value)
						input.value = checkboxdata.toString();
						if(hiddeninput)
							hiddeninput.value = checkboxdata.toString();
					}
				});
				//判断是否有初始选中
				if(checkboxdata.length>0){
					for(var t=0;t<checkboxdata.length;t++){
						if(checkboxdata[t] === this.data[i])
							tempinput.checked = true;
					}						
				}
				item.appendChild(tempinput);
				item.appendChild(this.doc.createTextNode(this.data[i]))
				this.items[i] = item;
				this.container.appendChild(item);
			}
			this.show();
		}		
	},
	onMouseover: function(){
		var _this = this, icls = this.itemCls, acls = this.activeCls;
		this.on(this.container,'mouseover',function(e){
			var target = e.target || e.srcElement;
			if(target.className == icls){
				if(_this.active){
					_this.active.className = icls;					
				}
				target.className = acls;
				_this.active = target;

			}
		});
	},
	onMousedown: function(){
		var _this = this ;
		var container = this.container, input = this.input, iCls = this.itemCls, aCls = this.activeCls,checkboxdata = this.checkboxdata ,hiddeninput = this.hiddeninput;		
		this.on(this.container,'mousedown',function(e){
			var target = e.target || e.srcElement;
			//首先判断target是何种类型
			if(target.type === 'checkbox'){
			}else{
				if(container.childNodes.length>0){
					if(target.childNodes[0].checked){
						//如果第一个节点Checkbox是选中状态,则取消选中
						target.childNodes[0].checked = false;
						if(checkboxdata.length>0)
						checkboxdata.remove(target.childNodes[1].nodeValue)
						input.value = checkboxdata.toString();
						if(hiddeninput)
							hiddeninput.value = checkboxdata.toString();						
					}
					else{
						//如果第一个节点Checkbox是未选中状态,则选中
						target.childNodes[0].checked = true;
						checkboxdata.push(target.childNodes[1].nodeValue);
						input.value = checkboxdata.toString();	
						if(hiddeninput)
							hiddeninput.value = checkboxdata.toString();						
					}
				}			
			}
		});
	}	
}








        
Hi3516CV610硬件设计避坑指南:从电源模块到DDR布线实战解析 本文深入解析了Hi3516CV610硬件设计中的关键难点与实战技巧。重点剖析了电源架构的选型陷阱与PCB布局要点,详细阐述了DDR3/L高速布线的等长匹配、信号完整性及端接策略,并提供了MIPI接口与时钟电路的隔离设计指南。旨在帮助工程师规避常见设计错误,提升系统稳定性与可靠性。 阅读详情

相关推荐

用野火FPGA开发板(EP4CE10)手把手教你实现一个高精度频率计(附完整Verilog代码)

本文详细介绍了基于野火FPGA开发板(EP4CE10)实现高精度频率计的全过程,涵盖等精度测量法的核心原理、Verilog代码实现及优化技巧。通过实际案例演示,帮助开发者掌握1Hz-50MHz范围、精度达0.1%的频率计设计方法,并提供完整的工程代码和实测数据。

weixin_29261711的博客 439

antd Select自定义下拉选项和回填

react antd Select自定义下拉选项和回填option

chunmeizhang_88的博客 8129

深入解析 TDA4VM/VH R5F 核中断机制:VIC 与非 VIC 模式下的实战对比与优化

本文深入解析了TI TDA4VM/VH平台中ARMv7-R架构R5F核的两种中断处理机制:VIC模式与非VIC模式。通过对比硬件自动跳转与软件向量表分发的核心流程、实战代码示例及性能差异,为开发者提供了基于实时性、灵活性与调试需求的选择指南和优化建议,帮助构建更稳定的嵌入式系统。

weixin_29159441的博客 98

antd checkbox 默认选中_antd-Checkbox多选操作

在项目中遇到了需要有多选操作的功能,刚开始的时候以为挺简单的,但是随着项目的深入,发现并不是想象的那么简单。下面就说一说我遇到的一些问题吧:1、将后端接口的数据变成多选项:思路:就是将所有的要展示数据重新整理,最后变成一个新的list放到CheckboxGroup的option里面去。例如[‘选项1’,‘选项2’,‘选项3’]。2、在勾选项中加入ID:按照上面的例子,我每次勾选能获取到我勾选的内容...

weixin_39552768的博客 3635

PS/2鼠标接口协议

一、PS/2鼠标接口        PS/2接口用于许多现代的鼠标和键盘,由IBM最初开发和使用。物理上的PS/2接口有两种类型的连接器:5脚的DIN和6脚的MINI-DIN。        二、鼠标的接口协议原理             PS/2鼠标接口采用一种双向同步串行协议。即每在时钟线上发一个脉冲,就在数据线上发送一位数据。但是在相互传输中 ,主机是拥有总线控制权的

Ant's home 1万+

sql server安装并SSMS连接

  SQL Server是一种广泛应用于网络业务数据处理的关系型数据库管理系统。SQL Server 2016是微软公司研发的新一代旗舰级数据库和分析平台,突出高级分析和丰富可视化,并融合了关键创新功能。其可提供对企业基础架构最高级别的支持,专门针对关键业务应用的多种功能与解决方案提供最高级别的可用性,并提供更多、更全面的功能以满足不同人群对数据的需求,包括支持来自不同网络环境的数据交互、全面的自助分析等创新功能。百度搜索sql server,在官网下载 地址是:SQL Server 下载| Microso

jiankang66的博客 5184

antd——封装select下拉框组件——解决数据量巨大时下拉框渲染缓慢的问题——基础积累

antd——封装select下拉框组件——解决数据量巨大时下拉框渲染缓慢的问题

yehaocheng520的博客 5528

CKA-CN考试之路----2

部分知道就可以了,考试不用输入,后面不再复述.这里我们需要将两端内容凭借成1个yaml。执行题目中给的的命令进行测试。

Q先生 242

el-select 自定义样式,插槽内添加复选框样式

*参考el-select多选对号样式实现checkbox中对号的样式*/placeholder="请选择"/*参考el-checkbox实现checkbox样式*//*清空原来的多选框样式*//*设置置灰内容样式*/

m0_62988771的博客 2266

大模型_WIN10使用hyper-v安装Ubuntu24.04虚拟机_配置独立静态IP地址_连接外网_并与内网其他机器互通_通过容器安装Dify_超详细安装过程002--人工智能工作笔记0247

本文详细描述了在Hyper-V环境中配置网络、安装Ubuntu虚拟机、设置IP地址、安装Docker以及部署Dify应用的过程。首先,通过Hyper-V管理器创建外部虚拟交换机(ExternalSwitch),并配置本机、虚拟交换机和Ubuntu虚拟机的IP地址,确保网络互通。接着,在Ubuntu虚拟机中安装Open-VM-Tools和Docker,并配置Docker的国内镜像源。最后,通过Git克隆Dify源码,使用Docker Compose启动Dify应用,完成部署。整个过程涵盖了网络配置、虚拟机管理

添柴程序猿的专栏 1750

SNAP计算哨兵2号的LAI/FVC/FAPAR

SNAP的计算LAI方法是基于PROSAIL模型,集成的模块,很方便。首先要下载SNAP软件,下载步骤见。

所有专家都曾始于新手 2505

antd checkbox的使用

antd checkbox的使用 1、勾选时拿到的勾选数据和复选框后展示的数据一致 即:引用antd官网的案例 const plainOptions = ['Apple', 'Pear', 'Orange']; const defaultCheckedList = ['Apple', 'Orange']; class App extends React.Component { state = { checkedList: defaultCheckedList, indetermina

qq_42582339的博客 1950

《Scratch图形化等级考试(1~4级)历届真题解析》专栏总目录

❤️ 专栏名称:《🌸 专栏介绍:中国电子学会《全国青少年软件编程等级考试》Scratch图形化等级考试(1~4级)历届真题解析。🚀 订阅专栏:原价 99.9,🔥 火爆订阅中 🔥,限时 19.9。订阅后可阅读专栏内所有文章,本专栏持续更新中,欢迎订阅!

人生就是一个不断学习的过程 1万+

javascritp 实现 带chekcbox功能的下拉框

 首先设置初始下拉框内容为隐藏的,点击&lt;请选择&gt;执行changeR方法 changR方法里运用 switch 并设置 标志 初始为1,在1的情况下 让下拉框内容循环显示   并将标志位设置为0  在标志为0时;四次内容循环,获取复选框是否被选中 如果被选中将value 的值传到第一行里 并再次将将标志设为1  循环隐藏·掉 &lt;html&gt; &lt;head&gt; ...

小米粒的博客 238

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Extjs如何设置chekcbox选中,并且不可编辑。

Ext.getCmp(value).setValue(true); Ext.getCmp(value).readOnly=true;

lsw51988的博客 510

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Javascript 返回上一页:选中GridVIew的 Chekcbox

1. 选中GridVIew的值 $("#reverse").click(function () { //$("#checkbox[Num]").attr("checked",!($("#checkbox[Num]").attr("checked"))); var checkboxs = $("#checkbox[Num]");...

weixin_34097242的博客 81

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Tekla二次开发实战:高效拆分与合并梁的自动化实现

本文详细介绍了Tekla二次开发在钢结构设计中的自动化应用,重点讲解如何通过C#编程实现梁的高效拆分与合并。通过实战案例展示自动化脚本如何将原本耗时数周的手动操作缩短至几小时,大幅提升工程效率,特别适合处理大型厂房等复杂钢结构项目。

weixin_30369041的博客 399

【第三章-react 应用(基于 react 脚手架)】

1.脚手架: 用来帮助程序员快速创建一个基于 xxx 库的模板项目;2. 提供了一个用于创建 项目的脚手架库: ; 3.项目的整体技术架构为:; 4.使用脚手架开发的项目的特点:模块化,组件化,工程化。创建项目成功: 页面效果: favicon.icon ------ 网站页签图标(偏爱图标) index.html --------主页面 logo192.png ------- logo 图 logo512.png ------- logo 图 manifest.json ----- 应用加壳的配置文件

nunumaymax的博客 489

原生js 写input 框,全选 -- 反选

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title

weixin_45379180的博客 548

checkbox全选

checkbox全选。

Roy__Jason的博客 291

工作小计:关于jquery复选框的ckeckbox的值改变

业务需求,需要再前端页面增加复选框,jsp页面,使用的是jquery代码如下,发现实际效果只有第一次可以生效,后面点击全选没有效果 /** * 全选 */ function checkAll() { $("input[name=ids]").attr("checked", true); } /** * 全不选...

weixin_33991727的博客 196

input chechbox选中

String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>       ">          My JSP 'b.jsp' start

u012325112的博客 380

PyGobject(四十一)布局容器之Box

在前面的文章中,所讲的布局容器全部是Gtk.Bin的子类,就是说都是单孩子容器。接下来的篇幅将会介绍多孩子容器。它们都是Gtk.Container的子类,单不是Gtk.Bin的子类 Gtk.Box盒子布局,允许孩子从左到右或者从上到下的排布。 它有两个子类,Gtk.HBox(水平布局)和Gtk.VBox(垂直布局)

Yu的专栏 1634

jquery checkbox多选最简单的写法

$('#chks').change(function(){ $('.chk_p').attr('checked',$(this).attr('checked')); });  全选

fyqaccpt96的专栏 711

Datatables里面checkbox选中问题

最近在学习jquery 里面的DataTables.在里面碰到了checkbox 选中问题;特总结如下: $(function() { $("#all").click(function() { $("input[name='sh']").attr("checked",this.checked); }); }); 不知道是什么原因,使用 $("input[name='sh']"

y3wegy的专栏 1万+

关于设置input_checbox大小的方法(兼容问题)

针对input_checkbox在火狐和欧朋浏览器中不支持的问题

超级兵团的博客 5775
上一篇: JAVA实现简单的单点登录
下一篇: jquery的slideUp、slideDown函数在IE中的bug
fly2004jun
博客等级 码龄18年 16粉丝 12原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值