java语言jQuery ui Autocomplete 自动补全+ajax获取数据库

本文详细介绍如何使用jQuery UI Autocomplete插件实现自动补全功能,结合Ajax从SpringMVC后端获取数据库数据,定制下拉框样式并添加滚动条。通过具体示例代码展示前端与Java后端交互过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识要点:

1,jQuery ui Autocomplete 自动补全插件使用

2,ajax获取后台(数据库)数据

3,java语言环境SpringMVC

4,修改Autocomplete再带下拉框样式,添加滚动条,

 

键入关键字:

选择对应数据: 

 

引入js文件:

<link rel="stylesheet" href="http://apps.bdimg.com/libs/jqueryui/1.10.4/css/jquery-ui.min.css">
<script src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="http://apps.bdimg.com/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>

css修改默认的布局方式:


		input[type=number] {
			-moz-appearance: textfield;
		}
		
		input[type=number]::-webkit-inner-spin-button,  
		input[type=number]::-webkit-outer-spin-button {
			-webkit-appearance: none;
			margin: 0;
		}
		
		.ui-helper-hidden-accessible {
			display: none;
		}
		
		.ui-autocomplete {
			position: absolute;
			cursor: default;
			border-radius: 3px;
			border: 1px solid #c0c0c0;
		}
		
		.ui-menu {
			list-style: none;
			padding: 0;
			margin: 0;
			display: block;
			outline: none;
		}
		
		.ui-menu .ui-menu-item a {
			text-decoration: none;
			display: block;
			padding: .2em .4em;
			line-height: 1.5;
			zoom: 1;
		}
		
		.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {
			background: #2f99ff;
			border: none;
			color: #fff;
			border-radius: 0;
			font-weight: normal;
		}
		
		.ui-autocomplete {
			max-width: 300px;
			max-height: 300px;
			overflow-y: auto;
			overflow-x: hidden;
		}
		* html .ui-autocomplete {
			height: 100px;
		}

HTML代码

<h4 style="color: red;">jQuery ui Autocomplete 自动补全+ajax获取数据库</h4>
<h3 style="color: #2f99ff;">支行信息查询:</h3>
<input name="brandName" type="text" style="width: 300px;" class="form-control" id="brandMsg" placeholder="请键入支行信息……" >
<h3 style="color: #2f99ff;">选择结果:</h3>
<div>
支行名称:<span id="bankName" style="color: red; font-size: 14px;"></span><br/>
支行编号:<span id="bankCode" style="color: red; font-size: 14px;"></span>
</div>
</div>

js代码 

<script type="text/javascript">
		$(function() {
		    var banddata = [];
		    $("#brandMsg").autocomplete({
		    	autoFocus: false,//如果设置为 true,当菜单显示时,第一个条目将自动获得焦点。
		    	delay:400,////击键后的延迟时间(单位毫秒).Default: 远程为400 本地10
		    	minLength:2,//执行搜索前用户必须输入的最小字符数。对于仅带有几项条目的本地数据,通常设置为零,
		    	width: 220,//下拉框的宽度,default:input元素的宽度
		    	max: 4,//下拉项目的个数,default:10
		    	scrollHeight: 300,// 下拉框的高度, Default: 180
				scroll: true,//当结果集大于默认高度时,是否使用滚动条,Default: true
				multiple: false,//是否允许输入多个值. Default: false
				autoFill: false,// 是否自动填充. Default: false
				multipleSeparator: " ",//输入多个字符时,用来分开各个的字符. Default: ","
				matchCase:false,//是否开启大小写敏感
				selectFirst:true,// 如果设置成true,下拉列表的第一个值将被自动选择, Default: true
				matchSubset:true,//是否启用缓存
				cacheLength: 10,//缓存的长度.即缓存多少条记录.设成1为不缓存.Default: 10
				mustMatch:false,//如果设置为true,只会允许匹配的结果出现在输入框,当用户输入的是非法字符时,将被清除, Default: false
				matchContains:true,//决定比较时是否要在字符串内部查看匹配.Default: false
		        source: function(request, response) {
		            var datas = $("#brandMsg").val();
		            $.ajax({
		                type: "get",
		                url: 'demos/getDatas.do?brandName=' + datas,
		                dataType: "json",
		                async: false,
		                success: function(data) {
		                	console.log(data.result);
		                    banddata = data.result;
		                }
		            });
		         response($.map(banddata,
		            function(item) { // 此处是将返回数据转换为 JSON对象,并给每个下拉项补充对应参数
		                return {
		                    // 设置item信息
		                    label: item.label.toString(),
		                    // 下拉项显示内容
		                    value: item.value.toString(),
		                    // 下拉项对应数值                                  
		                }
		            }));
		        },
		        // 输入框字符个等于2时开始查询
		        select: function(event, ui) { // 选中某项时执行的操作
		        	// 存放选中选项的信息
		        	console.log("您当前已选中label:"+ui.item.label);
		        	console.log("您当前已选中value:"+ui.item.value);
		        	$("#bankName").html(ui.item.label);
		        	$("#bankCode").html(ui.item.value);
		        }
		    }).focus(function () {
                $(this).autocomplete("search");//autocomplete 获取焦点时得到显示列表
            });
		});
	  </script>

JAVA代码(执行数据库代码略)

/**
	 * 获取数据
	 * @param page
	 * @throws Exception
	 */
	@RequestMapping(value="/getDatas")
	public void getSysPlyDoCountS(HttpServletRequest request,HttpServletResponse response,Page page){
		
		System.out.println("======================开始访问方法:"+DateUtil.getSdf_SSSTimes()+"======================");
		logBefore(logger, Jurisdiction.getUsername()+"方法correctPersonInfo");
		//返回的结果
		Map<String, Object> resultRqsMap = new HashMap<String, Object>();
		PageData pd = new PageData();
		
		pd = this.getPageData();
		String brandName = pd.getString("brandName");
		pd.put("C_BANK_NAME", "102");
		pd.put("C_BANK_BRANCH_NAME", brandName);
		pd.put("NAME", "%"+brandName+"%");
		pd.put("CODE", "102%");
		
		List<PageData>  cityListInfo = new ArrayList<PageData>();
		PrintWriter out  =  null;
		try {
			page.setPd(pd);
			cityListInfo = policyAuthoriseManager.findBranchInfo(page);
			
			request.setCharacterEncoding("UTF-8");
			response.setCharacterEncoding("UTF-8");
			out  = response.getWriter();
		} catch (Exception e) {
			e.printStackTrace();
		}
		Map<String, String>[] ccc = new Map[cityListInfo.size()];
		int nums = 0;
		for (PageData pds : cityListInfo) {
//			T.CODE,T.NAME
			Map<String, String> tempMap = new HashMap<String, String>();
			tempMap.put("label", pds.getString("NAME"));
			tempMap.put("value", pds.getString("CODE"));
			tempMap.put("id", nums+"");
			ccc[nums] = tempMap;
			nums++;
		}
		
		resultRqsMap.put("result", ccc);
    	JSONObject json = JSONObject.fromObject(resultRqsMap);
        out.print(json.toString());  
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值