select下拉复选

先发一下我想要的效果
在这里插入图片描述
大概就是这个样子。

原版

就是在select标签上添加multiple="multiple"属性,多选需要借助ctrl与shift键。写法简单,但是效果吗…

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<select multiple="multiple" style="width: 100px;">
			<option value ="1">1</option>
			<option value ="2">2</option>
			<option value ="3">3</option>
			<option value ="4">4</option>
		</select>
	</body>
</html>

在这里插入图片描述
开玩笑一样的样式,真的有甲方能同意吗?

jquery.multiselect

下载地址:https://github.com/ehynds/jquery-ui-multiselect-widget

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>

		<link rel="stylesheet" type="text/css" href="../../css/jmulti/jquery.multiselect.css" />
		<link rel="stylesheet" type="text/css" href="../../css/jmulti/prettify.css" />
		<link rel="stylesheet" type="text/css" href="../../css/jmulti/style.css" />
		<link rel="stylesheet" type="text/css" href="../../css/jmulti/jquery-ui.css" />

		<script src="../../js/jquery/jquery-1.8.0.min.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../js/jmulti/jquery-ui.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../js/jmulti/jquery.multiselect.min.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../js/jmulti/prettify.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../js/jmulti/widget.min.js" type="text/javascript" charset="utf-8"></script>
		<style type="text/css">

		</style>

		<script type="text/javascript">
			$(function() {
				$("#select_users1").multiselect({
					noneSelectedText: "",
					checkAllText: "全选",
					uncheckAllText: '全不选',
					selectedList: 5

				});

				$("#select_users2").multiselect({
					noneSelectedText: "",
					checkAllText: "全选",
					uncheckAllText: '全不选',
					selectedList: 5

				});

			});
			
			function ck(){
				alert(jQuery("#select_users2").val());
			}

		</script>
	</head>
	<body>

		<select name="Users" multiple="multiple" id="select_users1">
			<option value="1" selected="selected">1</option>
			<option value="2">2</option>
			<option value="3">3</option>
			<option value="4">4</option>
			<option value="5">5</option>
			<option value="6">6</option>
			<option value="7">7</option>
		</select>

		<select name="Users" multiple="multiple" id="select_users2">
			<option value="1a">1a</option>
			<option value="2a">2a</option>
			<option value="3a">3a</option>
			<option value="4a">4a</option>
			<option value="5a">5a</option>
			<option value="6a">6a</option>
			<option value="7a">7a</option>
		</select>

<input type="button" id="input1" value="test" onclick="ck();" />

	</body>
</html>

效果
在这里插入图片描述

freejs .net

在这里插入图片描述
好像要收费的样子,没有仔细研究。

wenzhixin_multiple-select

https://github.com/wenzhixin/multiple-select
git上随便找的,好像挺简单的样子。
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../../../js/jquery/jquery-1.8.0.min.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../../js/wenzhixin_multiple-select/multiple-select.js" type="text/javascript" charset="utf-8"></script>
		<link rel="stylesheet" type="text/css" href="../../../css/wenzhixin_multiple-select/multiple-select.css"/>
	<style type="text/css">
select {
  width: 500px;
}
	</style>
	</head>
	<body>
<select multiple="multiple">
  <option value="1">January</option>
  <option value="2">February</option>
  <option value="3">March</option>
  <option value="4">April</option>
  <option value="5">May</option>
  <option value="6">June</option>
  <option value="7">July</option>
  <option value="8">August</option>
  <option value="9">September</option>
  <option value="10">October</option>
  <option value="11">November</option>
  <option value="12">December</option>
</select>

<input type="button" name="" id="" value="test" onclick="ck();" />

<script>
  (function mounted() {
    $('select').multipleSelect();
  })();
  
  function ck(){
	  alert($('select').val());
  }
</script>

	</body>
</html>

git上还有大量相关代码 https://github.com/search?q=multiple-select

自己写的

自用,修改方便,并且能避免各种各样的兼容问题。

通过查看大量代码,发现一般的套路就是,需要自己写一个正常select标签,然后调用某个方法,将select隐藏,并在下面生成由li组成的下拉列表。一般都是这样的格式
在这里插入图片描述

按照这种套路,写了一个(未添加css)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../../../js/jquery/jquery-1.8.0.min.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>

	<!-- 完全通过_yflag属性区分类别 -->
	<div _yflag="multiDiv" id="testdiv1">
		<input _ymultiId="id1" type="text" value="" _yflag="multiInput">
		<!-- 可以回显 -->
		<input _ymultiId="id1" type="hidden" value="1;2" _yflag="trueVal_multi" >
		<div style="display: none;width: 200px;background: #FFFFFF;margin: -10px; padding: 0px;" 
			_yflag="multiSelectDiv">
			<ul style="list-style-type:none;padding-left: 5px;">
				<li _yflag="multiLi"><input _yflag="checkbox" type="checkbox" value="1" name="box_id1_Type" /><span _yflag="liShowDesc">aaaa</span></li>
				<li _yflag="multiLi"><input _yflag="checkbox" type="checkbox" value="2" name="box_id1_Type" /><span _yflag="liShowDesc">bbbb</span></li>
			</ul>
		</div>
	</div>
	
	<div _yflag="multiDiv" id="testdiv2">
		<input _ymultiId="id2" type="text" value="" _yflag="multiInput">
		<input _ymultiId="id2" type="hidden" value="" _yflag="trueVal_multi" >
		<div style="display: none;width: 200px;background: #FFFFFF;margin: -10px; padding: 0px;" 
			_yflag="multiSelectDiv">
			<ul style="list-style-type:none;padding-left: 5px;">
				<li _yflag="multiLi"><input _yflag="checkbox" type="checkbox" value="1" name="box_id1_Type" /><span _yflag="liShowDesc">aaaa</span></li>
				<li _yflag="multiLi"><input _yflag="checkbox" type="checkbox" value="2" name="box_id1_Type" /><span _yflag="liShowDesc">bbbb</span></li>
			</ul>
		</div>
	</div>	
	
	<input type="button" name="" id="" value="test" onclick="ck();" />

	<script type="text/javascript">
	
		jQuery("[_yflag='multiDiv']").click(function(event){
	  		var ev = event || window.event;
	  		if (ev.stopPropagation) {
	   			ev.stopPropagation();
	  		}else{
	   			ev.cancelable = true;
	  		}
	  		jQuery(this).find("[_yflag='multiSelectDiv']").css("display","block");
	 	});
	 	
	 	jQuery(document).click(function(){
			jQuery("[_yflag=multiSelectDiv]:visible").each(function(i){
				refrashMultiDiv(jQuery(this).parent(), 'no');
			});
	  		jQuery("[_yflag=multiSelectDiv]").css("display","none");
	 	});

		function refrashMultiDiv(thisObj, isInit){
			var valTemp = "";
			var trueVal = thisObj.find("[_yflag='checkbox']:checked").each(function(i){
				valTemp += jQuery(this).val() + ";";
			});
			if(valTemp)
				valTemp = valTemp.substr(0, valTemp.length - 1);
			
			if(isInit == 'yes'){
				trueVal = thisObj.find("[_yflag='trueVal_multi']").val();
			}else {
				trueVal = valTemp;
			}
			
	 		if(!trueVal)
	 			return clearThisObj(thisObj);
	 		
	 		var valArr = trueVal && trueVal.split(";");
	 		if(!valArr)
	 			return clearThisObj(thisObj);
	 			
	 		var showDesc = "";
	 		var hideVal = "";
		
	 		thisObj.find("[_yflag='multiLi']").each(function(i){
	 			for(var j = 0; j < valArr.length; j++){
	 				if(jQuery(this).find("[_yflag='checkbox']").val() == valArr[j]){
	 					jQuery(this).find("[_yflag='checkbox']").attr("checked",true);
	 					showDesc += jQuery(this).find("[_yflag='liShowDesc']").html() + ";";
	 					hideVal += jQuery(this).find("[_yflag='checkbox']").val() + ";";
	 				}
	 			}
	 		});
	 		
	 		if(showDesc){
	 			thisObj.find("[_yflag='multiInput']").val(showDesc.substr(0, showDesc.length - 1));
	 		}
	 		if(hideVal){
	 			thisObj.find("[_yflag='trueVal_multi']").val(hideVal.substr(0, hideVal.length - 1));
	 		}
		}
		
		function clearThisObj(thisObj){
			thisObj.find("[_yflag='multiInput']").val("");
			thisObj.find("[_yflag='trueVal_multi']").val("");
		}

	 	(function initMulti(){
	 		jQuery("[_yflag='multiDiv']").each(function(i){
	 			var thisObj = jQuery(this);
	 			refrashMultiDiv(thisObj, 'yes');
	 		});
	 	})();
		
		function ck(){
			alert(jQuery("[_ymultiId='id1'][_yflag='trueVal_multi']").val());
		}
	</script>  

	</body>
</html>

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一个HTML下拉复选框的例子: ```html <select multiple> <option value="option1">选项1</option> <option value="option2">选项2</option> <option value="option3">选项3</option> <option value="option4">选项4</option> <option value="option5">选项5</option> </select> ``` 这段代码创建了一个下拉复选框。使用`<select>`标签来定义下拉复选框,添加`multiple`属性可以让用户选择多个选项。在`<select>`标签中添加`<option>`标签来定义选项。每个`<option>`标签都有一个`value`属性来指定选项的值,以便后台处理。在`<option>`标签中添加文本作为选项的显示内容。 用户可以按住Ctrl键或Shift键并单击来选择多个选项。选择的选项会被以相应的值发送到服务器端进行处理。 如果要对选项进行预先选择,可以在`<option>`标签中添加`selected`属性,例如:`<option value="option1" selected>选项1</option>`。 这只是一个简单的例子,实际应用中可根据需求进行更复杂的设计和功能扩展,例如添加样式、绑定事件等。可以通过CSS样式来美化下拉复选框,也可以使用JavaScript重新设计其功能和行为。 ### 回答2: HTML下拉复选框是一种表单元素,它允许用户在给定的选项中进行多选。下面是一个示例的HTML代码,用于创建一个下拉复选框: <select multiple> <option value="option1">选项1</option> <option value="option2">选项2</option> <option value="option3">选项3</option> </select> 在这个代码中,`<select>`元素用于创建下拉复选框。`multiple`属性被添加到`<select>`元素中,以允许用户选择多个选项。每个选项由`<option>`元素定义,其中`value`属性指定选项的值,用于提交表单数据。在`<option>`元素内部,可以添加文本内容,用于显示给用户。 用户可以通过按住Ctrl键(在Windows系统中)或Command键(在Mac系统中)来选择多个选项。所选选项将以选中的状态呈现给用户。通过表单提交,我们可以获取到用户所选择的所有选项的值。 需要注意的是,这只是一个基本的示例,你可以根据自己的需求自定义选项内容和显示样式。为了增加用户体验,可以使用CSS样式对下拉复选框进行美化。可以使用JavaScript来增加一些行为,例如根据用户的选择显示或隐藏其他元素。 总而言之,HTML下拉复选框是一种很实用的表单元素,可以满足用户在给定选项中选择多个选项的需求。 ### 回答3: HTML下拉复选框是一种常用的用户界面元素,它允许用户从下拉列表中选择一个或多个选项。下面是一个简单的HTML下拉复选框的代码示例: ```html <select multiple> <option value="option1">选项1</option> <option value="option2">选项2</option> <option value="option3">选项3</option> <option value="option4">选项4</option> </select> ``` 在上面的代码中,`<select>`标签表示下拉复选框,`multiple`属性表示允许选择多个选项。每个选项都使用`<option>`标签来定义,在`value`属性中指定选项的值,显示在选项旁边的文本在`<option>`标签的起始和结束标签之间。 使用这个HTML下拉复选框代码,用户可以单击并选择一个或多个选项,按住Ctrl键(Windows)或Command键(Mac)选择多个选项。可以通过设置`selected`属性来预先选择一些选项,只需在对应的`<option>`标签上设置`selected`属性即可。 带有下拉复选框的HTML表单可以用于收集多个选项的用户选择,例如用户可以选择多个兴趣爱好、多个商品等。收集到的用户选择数据可以通过后端编程语言来处理和存储。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值