本地实现了一个搜索框自动补全的小功能,在JQuery UI的autocomplete插件的基础上,加入了自己的业务代码,贴出来回顾一下,同时可以给大家一个参考

首先贴出的是JQuery Ui 的自动补全插件部分的代码,后面的功能都是在其基础上追加的,直接拷贝到你的本地就可以直观的看到运行效果,也可以到官网上面体验和查看,为了方便,我这里是直接引入的JS链接;

jQueryUI 链接:https://jqueryui.com/download/

<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>jQuery UI Autocomplete - Default functionality</title><link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"><link rel="stylesheet" href="/resources/demos/style.css"><script src="https://code.jquery.com/jquery-1.12.4.js"></script><script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script><script>$( function() {var availableTags = [//这里要改成根据用户的输入,自动更换词库的形式"ActionScript","AppleScript","Asp","BASIC","C","C++","Clojure","COBOL","ColdFusion","Erlang","Fortran","Groovy","Haskell","Java","JavaScript","Lisp","Perl","PHP","Python","Ruby","Scala","Scheme"];$( "#tags" ).autocomplete({//调用补全功能source: availableTags});} );</script>
</head>
<body><div class="ui-widget"><label for="tags">Tags: </label><input id="tags">
</div></body>
</html>

下面说下我追加的部分功能及实现思路,

1、首先,数据源要根据用户输入的内容实时更新.
输入框的值随着用户的输入会一直变动.所以,输入框下方的推荐补全的内容要输入的值进行变动,这里使用onkeyup属性来监听键盘动作,并传递此时input的value值到js函数中.

    //html<input type="search" class="" id="tags" placeholder="搜索" required="" onkeyup="catch_keyword(this.value)">//js代码function catch_keyword(word) {//这里接受并log出valueconsole.log(word);}

2.发现当字符串中含有空格的时候,上面的字符串判断函数,返回的内容不符合预期,然后加入了一个去除字符串中所有空格的功能

    //去掉字符串中任意位置的空格,返回去除空格后的字符串function Trim(str, is_global) {var result;result = str.replace(/(^\s+)|(\s+$)/g, "");if (is_global.toLowerCase() == "g") {result = result.replace(/\s/g, "");}return result;}//字符串判断函数//判断一个字符串是否混有字母,全中文返回truefunction isChn(str) {var reg = /^[\u4E00-\u9FA5]+$/;if (!reg.test(str)) {return false;} else {return true;}}

3、

处理结束用户的输入后,就是提交到后台,然后返回数据源了,也就是availableTags;这里我把availableTags声明为全局变量.并且用同步的Ajax方式取回数据,然后赋值给availableTags,然后在监听键盘的函数中,使用返回的数据调用自动补全功能

    //请求后端获取数据源function get_source(word = null) {var url = "";$.get({type: 'GET',url: url,async: false,//改为同步dataType: 'json',success: function (response) {console.log('1');availableTags = response;}});}

4、这里更新下最开始的接收监听键盘后的value值的函数

    //捕捉键入的关键字function catch_keyword(word = null) {if (isChn(Trim(word, 'g'))) {//去掉空格后检查字符串,如果符合,继续请求后台get_source(word);$("#tags").autocomplete({source: availableTags //数据源});}}

5、附:完整代码

<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title></title><link rel="stylesheet" href="/jquery-weui-build/dist/lib/weui.min.css"><link rel="stylesheet" href="/jquery-weui-build/dist/css/jquery-weui.css"><link rel="stylesheet" href="/jquery-weui-build/demos/css/demos.css"><link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"><script src="https://code.jquery.com/jquery-1.12.4.js"></script><script src="/static/jquery-weui-build/dist/lib/fastclick.js"></script><script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script><script>$(function () {FastClick.attach(document.body);});</script><script src="/jquery-weui-build/dist/js/jquery-weui.js"></script>
</head>
<body><div class="ui-widget"><div class="weui-search-bar" id="searchBar"><form class="weui-search-bar__form" action="#"><div class="weui-search-bar__box"><i class="weui-icon-search"></i><input type="search" class="weui-search-bar__input" id="tags" placeholder="搜索" required=""onkeyup="catch_keyword(this.value)"><a href="javascript:" class="weui-icon-clear" id="searchClear"></a></div><label class="weui-search-bar__label" id="searchText"style="transform-origin: 0px 0px 0px; opacity: 1; transform: scale(1, 1);"><i class="weui-icon-search"></i><span>搜索</span></label></form><a href="javascript:" class="weui-search-bar__cancel-btn" id="searchCancel">取消</a></div>
</div><script>var availableTags = [];//数据源//先初始化自动补全功能$("#tags").autocomplete({source: availableTags //数据源});//去掉字符串中任意位置的空格function Trim(str, is_global) {var result;result = str.replace(/(^\s+)|(\s+$)/g, "");if (is_global.toLowerCase() == "g") {result = result.replace(/\s/g, "");}return result;}//判断字符串是否全是中文function isChn(str) {var reg = /^[\u4E00-\u9FA5]+$/;if (!reg.test(str)) {return false;} else {return true;}}//捕捉键入的关键字function catch_keyword(word = null) {if (isChn(Trim(word, 'g'))) {get_source(word);$("#tags").autocomplete({source: availableTags //数据源});}}//请求后端获取数据源function get_source(word = null) {var url = "<?php echo base_url('admin/Demo/source');?>?keyword=" + word;$.get({type: 'GET',url: url,async: false,//改为同步dataType: 'json',success: function (response) {console.log('1');availableTags = response;}});}</script>
</body>
</html>

搜索框自动补全(模糊匹配)功能实现相关推荐

  1. Elasticsearch 分布式搜索引擎 -- 自动补全(拼音分词器、自定义分词器、自动补全查询、实现搜索框自动补全)

    文章目录 1. 自动补全 1.1 拼音分词器 1.2.1 自定义分词器 1.2.2 小结 1.2 自动补全 1.3 实现酒店搜索框自动补全 1.3.1 修改酒店映射结构 1.3.2 修改HotelDo ...

  2. 纯js实现搜索框自动补全

    纯js实现搜索框自动补全 开发语言:HTML+CSS+JS 编辑器:VSCode 构建思路:建立两个div,一个用于输入和搜索,一个用于展示,用于展示的初始状态为隐藏的.后面当有键盘输入事件时就显示, ...

  3. jQuery搜索框自动补全功能插件实现-autocomplete.js

    最近用nodeclub实现股票的输入关键字自动补全股票信息进行搜索功能,原先用jQuery-ui,结果jQuery-ui库太大,所以考虑用其他插件,最终选择使用autocomplete.js,控件简单 ...

  4. 微信小程序搜索框自动补全功能

    ▶动态效果图◀ ▶效果涉及到的input属性◀ focus     Boolean     false     获取焦点      bindinput     EventHandle          ...

  5. html 搜索框 自动补全,自动完成的搜索框javascript实现

    自动完成的搜索框javascript实现 2019-01-04 编程之家 https://www.jb51.cc 编程之家收集整理的这篇文章主要介绍了自动完成的搜索框javascript实现,编程之家 ...

  6. html 输入框自动缩短 一行内显示,JQuery UI组合框自动补全功能改进版(即时全部显示+input内容保存)...

    JQuery UI Autocomplete(自动补全)功能在input前端设计中非常有用,最近一个项目正好用到,仔细研究了下组合框(combobox)的自动补全部分,官方地址是:https://jq ...

  7. Ajax实现搜索联想 自动补全

    什么是搜索联想?自动补全? .百度是一个很典型的代表.在百度的搜索框中输入相关信息的时候,会有搜索联想以及自动补全. .搜索联想和自动补全:实际上是为了方便用户的使用.让用户的体验更好. .搜索联想: ...

  8. elasticsearch模仿淘宝、京东、百度、谷歌搜索,自动补全、自动完成

    Elasticsearch(简称es)是一款功能强大的开源分布式实时搜索引擎,在日志分析.企业级搜索.时序分析等领域有广泛应用,几乎是各大公司搜索分析引擎的开源首选方案.本文不讲废话,不谈理论,目的在 ...

  9. php文本框自动补全,PHP自动补全表单的两种方法

    效果图: 第一种:从数据库中检索之后补全 第二种:邮箱等纯前端的补全 先说第二种,使用开源的插件,所以相对简单. github上面的项目 completer. https://github.com/f ...

最新文章

  1. 中国决定以“六大政策”推动新一代人工智能发展
  2. U盘安装CentOS 7
  3. Problem 63 何时该用glDrawTexiOES?
  4. MySQL- SQL执行计划 统计SQL执行每阶段的耗时
  5. jetty java 禁用目录列表_java – 如何禁用Jetty的WebAppContext目录列表?
  6. Qt多线程间信号槽传递非QObject类型对象的参数
  7. Informatica 简单使用
  8. ThickBox在ASP.NET中的应用
  9. linux Flatpak 安装包,snap卸载
  10. csdn怎么查看自己写的文章
  11. 简述研究生阶段如何提高自己的学习能力
  12. eclipse创建Javaweb项目
  13. KMP字符串模式匹配算法【精简代码模板】
  14. 父类指针可以指向子类对象
  15. PS--怎么取消之前选择的工具?
  16. 机器人搏击大赛冠军_喜报|2019中国智能机器人格斗大赛,石大学子在轮式自主格斗A、B组中包揽双冠!...
  17. 游戏出海加速度,腾讯、网易“快吃慢咽”
  18. 隐私泄露杀手锏 —— Flash 权限反射
  19. iview-admin 三级菜单路由
  20. 程序员学炒股(5) 股指交割日效应是否存在?

热门文章

  1. 骚年,你知道如何实现财务自由吗?
  2. VS 打开项目就提示报错,提示退出或者进行调试 问题解决
  3. eslint检测报错error Expected linebreaks to be 'LF' but found 'CRLF' linebreak-style
  4. 【记录】Windows 11|激活Windows系统的产品密钥的获取、安装、查看以及查询使用次数
  5. 如何在一年内赚50万?
  6. 射频电路设计常见问题以及经验总结
  7. matlab产生三角波——tripuls()
  8. CCF CSP 201412-3 集合竞价 python
  9. effective java 3th item2:考虑 builder 模式,当构造器参数过多的时候
  10. 彩色稻高食用价值 国稻种芯-何登骥:功能农业诠释农业大健康