可输入可选择可模糊查询的 select 下拉

  1. 可输入可选择可模糊查询的 select 下拉
    1. 目录
    2. 简介
    3. CSS代码
    4. JS代码
    5. HTML代码
    6. 参考链接
    7. 结束语

可输入可选择可模糊查询的 select 下拉

目录

简介

  • 相比网上各种下拉插件,要么出现各种传值问题,要么样式跟现有的项目冲突,此方法没有选用 select 标签,返璞归真
  • 啥也不说了,直接上代码。

CSS代码

<style>
.selectDiv {
	display:none;
	z-index:9999;
	position:absolute;/*不加的话可能会影响页面其他元素*/
	border:1px solid #999;
	width:215px;/*调整下拉框的宽度*/
	height:106px;
	margin-left:74px;
	background:white;
	border-radius:4px;/*调整边框圆角*/
	overflow-y:scroll;/*添加下拉框滚动条*/
	overflow-x:hidden;/*防止ie上下拉框出现横向滚动条*/
} 
.selectSpan {
 	width:190px;/*调整下拉框每个元素的宽度*/
 	height:18px;
 	padding-top:3px;
 	border:1px solid #ffffff;
 	margin-left:4px;
 	display:block;/*很重要,调整宽高度需要*/
 	word-wrap:break-word;/*自动换行*/
 	vertical-align:middle;/*垂直居中*/
 } 
.selectSpan:hover {
 	background:#1f7ed0;
 }
</style>

JS代码

var TempArr = [];
var selectDivHtml = "";
// 当鼠标点击输入框时执行此方法
function queryUnCreateAddress(){
	TempArr = [];
	var showFlag = true;
	$("#selectDivShow").html(selectDivHtml);

	$.ajax({ //此为向数据库查询json数据填充到下拉框里
		type:"post",
		url:path + "/workplace/workplaceInformationMessage!queryUnCreateAddress.action",
		dataType:"json",
		async:false,
		success:function(data){
			TempArr = data;
		    if(null != data && data.length > 0){
		    	$(data).each(function(index,value){
		    		var leng = checkLength(value.workplaceAddress); //计算数据的长度,区分中英文
					var height = Math.ceil(leng/21) * 15; //设置下拉框每个选项的高度,
					if(height == 15){
						height = 18;
					}
	    			selectDivHtml +="<span class='selectSpan' style='height:"+height+"px' data-code='"+value.addressCode+"' data-address='"+value.workplaceAddress+"' onclick='selectedValueInput(this)'>"+value.workplaceAddress+"</span>";
		    	});
		    }else{
		    	showFlag = false;
		    }
		},
		error:function(){
			alert("系统错误");
		}
	});
	$("#selectDivShow").append(selectDivHtml);
	selectDivHtml = "";

	if(showFlag){
		$("#selectDivShow").attr("style","display:block");
	}
}
// 点击下拉框每个选项时触发此方法
function selectedValueInput(obj){
	var code = $(obj).data("code");
	var address = $(obj).data("address");
	$("#workplaceAddressNum").val(code); //隐藏域,按需添加,方便传值到后台
	$("#contractAddress").val(address);
	$("#selectDivShow").attr("style","display:none");
}
// 在输入框输入内容时触发此方法,方便实时监听匹配
function setinput(this_){
	var select = $("#selectDivShow");
	select.html("");

	for(var i = 0;i<TempArr.length;i++){
		if(TempArr[i].workplaceAddress.substring(0,$(this_).val().length).indexOf($(this_).val()) == 0){
			var leng = checkLength(TempArr[i].workplaceAddress);
			var height = Math.ceil(leng/21) * 15;
			if(height == 15){
				height = 18;
			}
			selectDivHtml +="<span class='selectSpan' style='height:"+height+"px' data-code='"+TempArr[i].addressCode+"' data-address='"+TempArr[i].workplaceAddress+"' onclick='selectedValueInput(this)'>"+TempArr[i].workplaceAddress+"</span>";
		}
	}
	select.append(selectDivHtml);
	selectDivHtml = "";
}
// 离开输入框时触发此方法
function addressBlur(){
	var selectObj = $("#selectDivShow").find("span:hover");
	if(null != selectObj && selectObj.length > 0){ //针对鼠标点击下拉框选项触发此方法时的特殊处理
		selectedValueInput(selectObj);
		return;
	}
	$("#selectDivShow").attr("style","display:none");
}
// 计算输入值的长度
function checkLength(str){
	var sLen = 0;
	for(var i = 0;i<str.length;i++) {
		if(str.charAt(i) <= '\255') { // 单字节字符
			sLen++;
		}else { // 汉字或其他2字节字符
			sLen = sLen + 3;
		}
	}
	return sLen;
}

HTML代码

<input type="text" id="contractAddress" name="workplaceInformation.contractAddress" 
onblur="addressBlur()" oninput="setinput(this)" onfocus="queryUnCreateAddress()" value="${workplaceInformation.contractAddress }" />
<div id="selectDivShow" class="selectDiv"></div>

参考链接

结束语

  • 20190723更新 仿携程等网站鼠标放入目的地输入框时的样式

    <style>
    .labels {
        width: 70px;
        height: 25px;
        line-height: 25px;
        margin: 5px 5px 0 5px;
        float: left;
        text-align: center;
        font-size: 15px;
        cursor: pointer;
    }
    </style>
  • 未完待续…


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 tujide.lv@foxmail.com

文章标题:可输入可选择可模糊查询的 select 下拉

字数:931

本文作者:Tujide.lv

发布时间:2018-12-02, 19:00:12

最后更新:2024-04-10, 17:49:31

原始链接:https://lvzhiqiang.top/2018/12/02/te-select.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏