使用jquery的autocomplete属性监听输入实时查询实现联想补全操作

【前端】使用autocomplete实现输入框自动补全功能,同时获取输入框的值 使用autocomplete实现输入框自动补全功能,同时支持动态添加/删除输入框,并获取输入框的值。 阅读详情

平时使用百度,淘宝等软件搜索时,常见一个搜索框联想提示,感觉确实好用但没有研究过原理,最近恰巧工作中遇到一个同样的场景,不同于大厂使用高端的Python,这次需要使用jQuery的autocomplete属性来自动联想补全输入框内容。

autocomplete的实现方式千千万,这里记录一下个人的实现方式,从前端开始。

实现思路:

1.使用jquery的.bind属性监听需要自动补全的输入框,一旦有内容变化(输入一个字符开始),便将输入的值传递到后台,开始执行后台查询操作(ajax操作)。

2.将返回值拼装成数组返回前端,然后进行autocomplete自动补全操作,补全效果为在输入框下方展示所有与输入值相关的引用值,设置的展示条数为10条。

前端代码:

这里只选取了基本属性使用,更多属性与属性的涵义可参考文章最后的autocomplete属性总结

//html代码,也就是输入框的页面位置
<input type="text" name="autocompleteCode"  id="autocompleteCode"/>

//全部的js实现代码
$(function() {
            $("#autocompleteCode").bind('input propertychange', function() {
                var code = $("#autocompleteCode").val();
                //模糊查询
                jQuery.ajax({
                    type: "POST",
                    data: {"code": code},
                    url: "<%=request.getContextPath()%>/XXXXX/XXX.htm",
                    dataType: 'json',
                    success: function (data) {
                        console.log(data);
                        //自动补全
                        $("#autocompleteCode").autocomplete(data.result,{
                                minChars: 1,
                                max:10,//
                                width: 300,
                                matchContains: true,
                                autoFill: false,
                                delay: 1,
                            formatItem:function(item) {
                                    return "\"" + item.targetCode + "\"";
                                },
                                formatMatch: function(row, i, max) {
                                    return row.targetCode ;
                                },
                                formatResult: function(row) {
                                    return row.targetCode;
                                }
                            })
                    }
                });
            })

        })

后台处理:

使用前端传来的参数模糊查询,然后依据业务情况拼装数据,这里最终返回的数据格式是map数组,然后转为jsonobject返回前端。

@ResponseBody
    @RequestMapping(value="/XXXX", method = RequestMethod.POST)
    public void XXXXX(HttpServletRequest request,HttpServletResponse response){
        //返回的结果
        Map<String, Object> resultRqsMap = new HashMap();
        String autocompleteCode = request.getParameter("code");
        List<Map> codeLists =  tttttService.autocomplete(autocompleteCode);
        PrintWriter out  =  null;
        try {
            response.setCharacterEncoding("UTF-8");
            out  = response.getWriter();
        } catch (Exception e) {
            e.printStackTrace();
        }
        Map<String, String>[] ccc = new Map[codeLists.size()];
        int nums = 0;
        for (Map codeList : codeLists) {
            Map<String, String> tempMap = new HashMap();
            tempMap.put("targetCode", codeList.get("code").toString());
            ccc[nums] = tempMap;
            nums++;
        }

        resultRqsMap.put("result", ccc);
        JSONObject json = new JSONObject(resultRqsMap);
        out.print(json);
    }

这两段代码便实现了一个由监听输入框内容变化发起的提供自动补全列表的操作,操作效果大概是这样(这里下拉列表需要双击输入框才展示,属性配置的):

问题总结:

虽然实现了功能要求,但是需要注意的是这里对输入框每一次变动都实时响应,进行数据库的交互查询,所以这样的实现并不适合业务操作频繁,并发高的场景,这样写能轻而易举的能将数据库搞崩。

所以面对访问比较频繁的场景有两种改良方式:

一种是将自动补全列表放入缓存,页面的自动补全列表内容仍从后台返回,但是后台不交互数据库了,每次取值从缓存读取,只有缓存中没有相关内容时才交互数据库,将其放入缓存,这种适合访问量比较大的场景,如面对公众操作的业务。

第二种每次查询仍然从数据库交互,但是每次只交互一次,在功能页面初始化时完成,一次性将自动补全库的全部内容返回页面,交给autocomplete属性完成自动匹配,也就是之后的自动补全操作只在页面完成,不进行数据库交互了,这种适合补全内容适中,业务访问量不是特别大的场景,如后台管理性质的系统。

上面只是最基本实现的简单例子,样式与实现方式均有很大的可配置性,下面罗列一下autocomplete的常用属性:

autocomplete属性总结:

语法: 
autocomplete(urlor data, [options] ) 
参数: 
url or data:数组或者url 
[options]:可选项,选项解释如下: 
1) minChars (Number) 
在触发autoComplete前用户至少需要输入的字符数,Default:1,如果设为0,在输入框内双击或者删除输入框内内容时显示列表。 
2) width (Number) 
指定下拉框的宽度,Default: input元素的宽度 
3) max (Number) 
autoComplete下拉显示项目的个数,Default: 10 
4) delay (Number) 
击键后激活autoComplete的延迟时间(单位毫秒),Default: 远程为400 本地10 
5) autoFill (Boolean) 
要不要在用户选择时自动将用户当前鼠标所在的值填入到input框,Default: false 
6) mustMatch (Booolean) 
如果设置为true,autoComplete只会允许匹配的结果出现在输入框,所有当用户输入的是非法字符时将会得不到下拉框,Default:false 
7) matchContains (Boolean) 
决定比较时是否要在字符串内部查看匹配,如ba是否与foo bar中的ba匹配.使用缓存时比较重要.不要和autofill混用.Default: false 
8) selectFirst (Boolean) 
如果设置成true,在用户键入tab或return键时autoComplete下拉列表的第一个值将被自动选择,尽管它没被手工选中(用键盘或鼠标).当然如果用户选中某个项目,那么就用用户选中的值. Default: true 
9) cacheLength (Number) 
缓存的长度.即对从数据库中取到的结果集要缓存多少条记录.设成1为不缓存.Default: 10 
10) matchSubset (Boolean) 
autoComplete可不可以使用对服务器查询的缓存,如果缓存对foo的查询结果,那么如果用户输入foo就不需要再进行检索了,直接使用缓存.通常是打开这个选项以减轻服务器的负担以提高性能.只会在缓存长度大于1时有效.Default: true 
11) matchCase (Boolean) 
比较是否开启大小写敏感开关.使用缓存时比较重要.如果你理解上一个选项,这个也就不难理解,就好比foot要不要到FOO的缓存中去找.Default: false 
12) multiple (Boolean) 
是否允许输入多个值即多次使用autoComplete以输入多个值. Default:false 
13) multipleSeparator (String) 
如果是多选时,用来分开各个选择的字符. Default:"," 
14) scroll (Boolean) 
当结果集大于默认高度时是否使用卷轴显示 Default: true 
15) scrollHeight (Number) 
自动完成提示的卷轴高度用像素大小表示 Default: 180 
16) formatItem (Function) 
为每个要显示的项目使用高级标签.即对结果中的每一行都会调用这个函数,返回值将用LI元素包含显示在下拉列表中.Autocompleter会提供三个参数(row, i, max): 返回的结果数组, 当前处理的行数(即第几个项目,是从1开始的自然数), 当前结果数组元素的个数即项目的个数.Default: none, 表示不指定自定义的处理函数,这样下拉列表中的每一行只包含一个值. 
17) formatResult (Function) 
和formatItem类似,但可以将将要输入到input文本框内的值进行格式化.同样有三个参数,和formatItem一样.Default: none,表示要么是只有数据,要么是使用formatItem提供的值. 
18) formatMatch (Function) 
对每一行数据使用此函数格式化需要查询的数据格式. 返回值是给内部搜索算法使用的. 参数值row 
19) extraParams (Object) 
为后台(一般是服务端的脚本)提供更多的参数.和通常的作法一样是使用一个键值对对象.如果传过去的值是{ bar:4 },将会被autocompleter解析成my_autocomplete_backend.php?q=foo&bar=4 (假设当前用户输入了foo). Default: {} 
20) result (handler) Returns:jQuery 
此事件会在用户选中某一项后触发,参数为: 
event: 事件对象. event.type为result. 
data: 选中的数据行. 
formatted:formatResult函数返回的值 
例如: 
$("#singleBirdRemote").result(function(event, data, formatted){ 
//如选择后给其他控件赋值,触发别的事件等等 
}); 

实现的匆忙,需要结合业务继续修改代码,这种基础的实现代码后续变化会很大,在遇到类似业务借鉴度不高了,抢救性的记录一下,比较粗枝大叶。

第二种减轻数据库压力,只查询一次全部数据,页面自动无限匹配补全的操作方法已经整理完毕,传送门:使用jQuery的autocomplete实现数据查询一次,联想自动补全-优快云博客

手把手教你用jQuery UI Autocomplete实现动态输入框自动补全(含AJAX实战) 本文详细讲解了如何利用jQuery UI Autocomplete插件,结合事件委托和动态ID管理,为可动态增删的输入框实现AJAX驱动的自动补全功能。通过实战代码演示,解决了动态DOM元素事件绑定失效的核心难题,并提供了性能优化与数据收集等高级技巧,帮助开发者构建健壮的前端交互表单。 阅读详情

相关推荐

仿autoComplete输入联想且带分页 远程数据源(纯自创)

效果图: 仿写初衷:因为代码表的数据量太大了,用select做下拉列表和点击后弹框选择,都不太人性化了,再加上本人的一点点强迫症,再就jQuery autoCompete吧,它竟然分不了页,这下我蛋疼了,还非得强迫我自己写啊! 仔细想想,这功能要做的话,也不太难,就几个地方要考虑: 1.通过什么事件来刷新数据? 答案:通过文本框的onkeyup,监听onkeyup事件,即可将键

u011054048的专栏 1018

autocomplete属性的使用

通过设置表单属性可以实现提交方式、自动完成、表单验证等不同的表单功能。下面将对form标记的相关属性进行详解! 效果图: 当你在“用户名”的文本输入框中依次输入……,分别单击“提交”按钮。然后再单击“用户名”文本框时,效果如下: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>autocomplete属性的使用</title> </head

酷小亚 2万+

深入掌握jQuery Autocomplete完全指南

jQuery是一个快速、小巧、功能丰富的JavaScript库,它简化了HTML文档遍历、事件处理、动画和Ajax交互。自2006年发布以来,jQuery迅速成为最流行的JavaScript库之一,广泛应用于网页前端开发中。jQuery极大地简化了JavaScript的使用,并推动了网页设计的发展。它不仅是实现网页交云的工具,更是一种强大的前端开发框架,为开发人员提供了便捷的途径来构建动态的、响应式的用户界面。

weixin_42186387的博客 1113

jQuery Autocomplete 使用详细说明

jQuery.Autocomplete 是jquery的流行插件,能够很好的实现输入框的自动完成(autocomplete)、建议提示(input suggest)功能,支持ajax数据加载。 官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/ 一、调用本地数据 最简单的Autocomplete(...

kokorodo的随堂笔记 907

掌握jQuery Autocomplete:增强输入体验

本文还有配套的精品资源,点击获取 简介:jQuery Autocomplete是一个高效的前端插件,专为输入框设计,能自动完成用户输入,优化交互体验。它允许开发者通过简单配置与数据源,实现动态且响应式的自动补全功能,并提供丰富的API与事件,方便进行自定义和事件监听。本篇详解将引导开发者通过示例代码深入理解插件的使用步骤,确保可以快速集成和定制自动补全功能,以满足各种Web...

weixin_31597759的博客 1543

实现Bootstrap风格的jQuery autocomplete功能

除了基本属性之外,autocomplete插件还允许开发者通过回调函数来自定义其外观和行为。例如,通过select回调函数,可以在用户选择某个建议项后执行特定的代码。// 用户选择了某个建议项时的操作});在上面的代码段中,select回调函数接收了两个参数:事件对象和UI对象。UI对象中包含了被选中的建议项的相关信息。通过这种方式,开发者可以灵活地对autocomplete插件的行为进行定制。

weixin_36122351的博客 369

使用jQuery的autocomplete实现数据查询一次,联想自动补全

上述代码中掺杂了些个人业务,重点就在于里面那个for循环,核心思路就是,将返回值做成一个json串返回前端,json串格式都是统一的:{’名称’:‘内容’,‘名称’:‘内容’......},我这里做成了每条数据都是代码+内容,业务根据个人来实现即可。但是这种方法对数据库压力太大,这次通过改造,实现了页面初始化时将需要补全的全部信息查出放在页面,页面上的补全操作相当于使用本地数据联想补全,大大减轻了数据库压力。后台拿到全部的补全信息放到前端,剩余操作便由前端autocomplete属性自动完成。

httpmc2018的博客 718

jquery autocomplete 动态补全例子有说明ajax加载

jquery autocomplete 动态补全例子支持中文 ajax传递json数据 文件里有json数据拼接

jQuery Autocomplete 插件完全使用指南:5 分钟给输入框加上智能联想

你在做搜索框、订单表单或者用户管理页面时,一定遇到过这样的尴尬:用户记不全国家名、打错一个字母就找不到选项,或者在后端接口面前一遍遍手敲完整值。与其自己写一套「监听键盘 + 发请求 + 渲染下拉 + 处理失焦隐藏」的轮子,不如直接引入 **jQuery Autocomplete**(npm 包名 `devbridge-autocomplete`)——一个专注给文本输入框添加自动补全/自动提示下拉的

gitblog_00669的博客 200

jQuery文本框自动联想补全特效(边输入边搜索)

jQuery文本框自动联想补全特效(边输入边搜索) :$(document).ready(function(){ $('#search-form').autocomplete({ hints: proposals, width: 300, height: 30, onSubmit: function(text){ $('#message').html('Selected: ' + text + ''); } }); });

ST7789P3初始化配置

【代码】ST7789P3初始化配置。

zqq_1314的博客 4148

如何用 jQuery-Autocomplete 快速实现搜索框自动补全:一份面向新手的实战指南

> 想在输入框里加上"边打字边出建议"的自动补全(autocomplete / autosuggest)功能,却不想从零手写键盘导航、Ajax 请求和结果缓存?**jQuery-Autocomplete**(npm 包名 `devbridge-autocomplete`)是一款只依赖 jQuery 3.0+ 的免费开源插件,压缩后仅约 13KB,却能一个方法搞定所有脏活累活。这篇文章不按手册流水账

gitblog_00545的博客 238

SpringBoot项目整合达梦数据库(MYSQL 转换 达梦数据库)

注意:当迁移过程中出现下面问题时,如有触发器或者外键,需要先关掉触发器和外键,然后进行迁移,不然会导致迁移失败。(2)dm.ini修改【#compatibility】的【COMPATIBLE_MODE】=4。3、添加用户:如果导入的DM数据库需要和MYSQL的用户一样,添加ROOT用户。方法一:服务器配置:设置系统兼容性(DM控制台工具),兼容MySQL。服务器配置又该有两种方式:①DM控制台工具修改;MYSQL的数据表转换成DM的数据表时,点击转换按钮。在这里操作:MYSQL数据库迁移至DM数据库。

m0_74824635的博客 2013

JQuery Autocomplete 使用总结

<br />1.传递多参数,加次属性<br /> <br />   a.extraParams: {id:function(){return $('#id').val();}} <br /> <br />   b.$("#id").setOptions({extraParams: {projectId:temp}});<br /> <br />2. 刷新组件,可做级联Autocomplete时候使用<br /> <br />   $("#id").setOptions({extraParams: {

Samuel 1743

ArcGIS实验教程——实验二十五:大型商场选址经典案例

本实验基于ArcGIS平台进行商场选址分析,综合考虑道路、居民点、停车场和已有商场四个影响因素。通过缓冲区分析建立各要素的影响范围(道路50米、居民点100米、停车场100米、已有商场500米),采用叠加分析中的相交和擦除运算确定最优选址区域。实验建立了区位评价体系,通过属性赋值(1/-1)和联合运算生成综合评价结果,并实现分级可视化显示。注意事项包括距离参数设置对结果的影响以及正确选择空间分析工具。该流程为商业选址提供了科学的GIS解决方案。

智慧空间实验室 1万+

ubuntu-emto-cpa 测试和使用(单核运行)

ubuntu-emto-cpa 测试和使用(单核运行)

qq_45834835的博客 1399

实时监听input的值,类似于实现模糊查询,处理输入中文问题

今天有个需求,根据input用户输入进行实时进行模糊查询。一想到这个需求就想到jQuery的input propertychange函数。但是做起来和想一般都不一样的,,,,,然后我就光荣跳坑了。实现实时监听其实有两套方案,下面废话少说,进入第一个方案1.使用input propertychange函数,结合compositionstart和compositionend监听输入法。不过缺点是要调用...

qq_34672907的博客 2749

YOLOv8改进 | Conv篇 | 利用YOLOv9的GELAN模块替换C2f结构(附轻量化版本 + 高效涨点版本 + 结构图)

本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的GELAN模块来改进YOLOv8中的C2f,GELAN融合了CSPNet和ELAN机制同时其中利用到了RepConv在获取更多有效特征的同时在推理时专用单分支结构从而不影响推理速度,同时本文的内容提供了两种版本一种是参数量更低涨点效果略微弱一些的版本(参数量V8n下降80w,计算量为6.1GFLOPs),另一种是参数量稍多一些但是效果要不参数量低的效果要好一些(均为我个人整理),提供两种版本是为了适配不同需求的读者,具体选择

Snu77的博客 7566

jQuery Autocomplete自动完成实战

今天和大家分享下jQuery Autocomplete 实战技术,也就是输入框自动提示完成功能; 用户在输入一个字符串的部分内容时,生成下拉菜单实现输入框自动补全,给予用户选择; 大大节约了用户的输入时间,增加了良好的效果体验; 此编文章所使用的是jquery.autocomplete.js 2017的版本,对比了其他版本,我觉得此版本比较符合我的业务需求; 实现逻辑是一样的,我将分享出...

橙乐果果 1558

【同等学力】2005-数学⭐✨

有r个正方形排成一行,今用红、黄、白、蓝四种颜色给这个r个正方形染色,每个正方形只能染一种颜色,如果要求染红、黄、白色的正方形分别至少出现一个,问有多少种不同的染法?3、(4分)设G是一个有n个结点m条边的连通简单平面图,若n≥3,则m≤3n-6.4、(4分)证明:任何连通简单平面图至少有一个结点的度数不超过5

super_mochi1 306

基于YOLOv8的野生菌菇检测、识别与分类系统

YOLOv8是YOLO系列模型的最新版本,继承了YOLO系列高效、精确的特点。YOLOv8采用了新的网络架构,并优化了推理速度和检测精度。与传统的目标检测算法(如Faster R-CNN)不同,YOLO模型通过一次前向传播同时完成目标定位与分类,因而具有非常高的计算效率。

YOLO 1284

jquery.autocomplete使用小感悟

最近工作中用到了jquery.autocomplete,稍有体悟,与大家共同探讨。 主要遇到了这么几个问题:1.ajax查询 2.全模糊匹配 3.中文乱码 事实上,我犯了一个相当2的错误,当时不知道怎么脑子秀逗。这个问题居然想到的是手动用jquery的ajax去后台匹配数据,自己拼装成json,然后传给autocomplete。。。 而人家控件已经有提供了对应的方法。而实际上,看js,aut

fkpac3的专栏 770

【教程4>第7章>第6节】基于FPGA的Viterbi维特比译码verilog实现——ACS加比选单元1

本文介绍了ACS加比选单元模块在FPGA中的实现过程,重点讲解了维特比译码中的ACS单元功能及其在硬件实现中的关键问题。文章首先概述了ACS单元在维特比译码中的作用,即通过计算和比较分支度量值来选择最优路径。接着,详细描述了FPGA实现中的分支度量值归一化处理策略,并指出了其存在的弊端。随后,文章提供了基于Verilog的ACS加比选单元模块代码,解释了其输入输出端口及工作流程。最后,总结了本小节内容,并预告了下一章节将涉及ACS顶层模块的开发与仿真测试。

FPGA/MATLAB学习教程/源码/项目合作开发 568

jquery Autocomplete使用

插件地址:http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/ 这个文档看起来不是那么的顺眼,自己琢磨了一下 $(".autocomplete").autocomplete("/json/produ...

chunzhi7717的博客 165

计算机控制技术及应用

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

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

php的autocomplete,php jquery autocomplete

在网上搜了许多,累shi了,折腾了半天,终于搞定,总结一下下...1. 需要jquery-1.3.2.min.js (++),jquery.autocomplete.js,jquery.autocomplete.css 三个文件。哪里有?google..2. 前端页面 js 如下:user.js$(function() { $("#u_name").blur(function(){ ...

weixin_42366752的博客 209

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jquery自动补全

最近一段时间在忙着找工作,很久没有更新了,之前做了一个自动补全的功能,花费了我很多时间,因为涉及到很多前端开发相关的知识,包括DOM, js, coffeescript, jquery等等,现在打算详细的描述一下了。很多网站都有用户名或者输入内容自动补全的功能,我实现的是比较简单的一种,即评论区用户名自动补全,在 @ 其他评论人的时候,文本框会自动筛选出所有评论着的名字。 很显然,该功能主要依靠

qwbtc的博客 1066

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: jsp原理与EL,JSTL表达式基础内容整理
下一篇: 使用jQuery的autocomplete实现数据查询一次,联想自动补全
mmm.c
博客等级 码龄9年 117粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值