说明:我这里显示的数据采用词典(词典在js中自定义的,看下面文字),主要显示key.

页面元素:

  1.  
  1. <style type="text/css">.search
  1.  
  1. {
  2. left: 0;
  3. position: relative;
  4. }
  5. #auto_div
  6. {
  7. display: none;
  8. width: 92%;
  9. min-height:50px;
  10. max-height:200px;
  11. overflow-y:auto;
  12. border: 1px #74c0f9 solid;
  13. background: #FFF;
  14. position: absolute;
  15. top: 34px;
  16. left: 0;
  17. color: #323232;
  1.  
  1. }
  2. </style>
  1. <div class="search"> <input type="text" name="unit" id="search_text" autocomplete="off" class="input input2 required" placeholder="请输入关键字查询材料单位"> <div id="auto_div" ></div> <i class="i-star"></i> </div>
  1. $(function(){
  2. //单位搜索
  3. old_value = $("#search_text").val();
  4. $("#search_text").focus(function () {
  5. if ($("#search_text").val() == "") {
  6. AutoComplete("auto_div", "search_text", unitsDic);
  7. }
  8. });
  9. $("#search_text").keyup(function () {
  10. AutoComplete("auto_div", "search_text", unitsDic);
  11. });
  12. //设置待选单位数据 ,这里的数据通过freemarker获取的list值
  13. <#list unitList as unitInfo>
  14. <#if unitInfo.text??>
  15. unitsDic.add('${unitInfo.text?trim}','${unitInfo.id}');
  16. </#if>
  17. </#list>
  18. });
  1. //快速搜索单位
  2. //存储获取服务器单位数据,存的键值对
  3. var unitsDic = new Dictionary();
  4. var old_value = "";
  5. var highlightindex = -1; //高亮
  6. //自动完成
  7. function AutoComplete(auto, search, unitsDic) {
  8. if ($("#" + search).val() != old_value || old_value == "") {
  9. var autoNode = $("#" + auto); //缓存对象(弹出框)
  10. var carlist = new Array();
  11. var n = 0;
  12. old_value = $("#" + search).val();
  13. for(var key in unitsDic.datastore){
  14. if (key.indexOf(old_value) >= 0) {
  15. carlist[n++] = key;
  16. }
  17. }
  18. if (carlist.length == 0) {
  19. autoNode.hide();
  20. return;
  21. }
  22. autoNode.empty(); //清空上次的记录
  23. for (i in carlist) {
  24. var wordNode = carlist[i]; //弹出框里的每一条内容
  25. var newDivNode = $("<div>").attr("id", i); //设置每个节点的id值
  26. newDivNode.attr("style", "font:14px/25px arial;height:25px;padding:0 8px;cursor: pointer;");
  27. newDivNode.html(wordNode).appendTo(autoNode); //追加到弹出框
  28. //鼠标移入高亮,移开不高亮
  29. newDivNode.mouseover(function () {
  30. if (highlightindex != -1) { //原来高亮的节点要取消高亮(是-1就不需要了)
  31. autoNode.children("div").eq(highlightindex).css("background-color", "white");
  32. }
  33. //记录新的高亮节点索引
  34. highlightindex = $(this).attr("id");
  35. $(this).css("background-color", "#ebebeb");
  36. });
  37. newDivNode.mouseout(function () {
  38. $(this).css("background-color", "white");
  39. });
  40. //鼠标点击文字上屏
  41. newDivNode.click(function () {
  42. //取出高亮节点的文本内容
  43. var comText = autoNode.hide().children("div").eq(highlightindex).text();
  44. highlightindex = -1;
  45. //文本框中的内容变成高亮节点的内容
  46. $("#" + search).val(comText);
  47. //设置材料编码值
  48. getUnitCode(comText);
  49. })
  50. if (carlist.length > 0) { //如果返回值有内容就显示出来
  51. autoNode.show();
  52. } else { //服务器端无内容返回 那么隐藏弹出框
  53. autoNode.hide();
  54. //弹出框隐藏的同时,高亮节点索引值也变成-1
  55. highlightindex = -1;
  56. }
  57. }
  58. }
  59. //点击页面隐藏自动补全提示框
  60. document.onclick = function (e) {
  61. var e = e ? e : window.event;
  62. var tar = e.srcElement || e.target;
  63. if (tar.id != search) {
  64. if ($("#" + auto).is(":visible")) {
  65. $("#" + auto).css("display", "none")
  66. }
  67. }
  68. }
  69. }
  70.  
  71. /*自定义字典 Dictionary类*/
  72. function Dictionary() {
  73. this.datastore = new Object();
  74. this.add = add;
  75. this.getValue = getValue;
  76. }
  77.  
  78. function add(key, value) {
  79. this.datastore[key] = value;
  80. }
  81.  
  82. function getValue(key) {
  83. return this.datastore[key];
  84. }

效果如下:

该文当可以参考写的更简洁的:https://blog.csdn.net/yedajiang44/article/details/72758269

上面这种是一次先已经将数据加载到页面上了,还有中直接通过发起请求的方式,实时查询的方式.可以参考下面的方式:

https://www.cnblogs.com/leiting/p/9513711.html

js中实现输入框类似百度搜索的智能提示效果的更多相关文章

  1. jquery php 百度搜索框智能提示效果

    这个程序是利用php+ajax+jquery 实现的一个仿baidu智能提示的效果,有须要的朋友能够下载測试哦. 代码例如以下 index.html文件,保保存成index.htm <!DOCT ...

  2. Ajax跨域实现淘宝/百度搜索下拉提示效果

    最近学到Ajax,觉得自己对与前后端的数据交互有了一个基本的了解.下面是Ajax应用到淘宝/百度的搜索功能的一个简单的小实例,就是输入一个词,下拉框中自动显示匹配的内容:

  3. ajax实现异步前后台交互,模拟百度搜索框智能提示

    1.什么是异步?在传统的网站项目中,填写一堆数据,最后点击提交,在点击提交的这一刻才实现数据提交,前后台交互.在你点击提交之前数据是没有提交到后台的.这样就会造成很大的不便.比如,我填了一大堆数据,结 ...

  4. js/jQuery实现类似百度搜索功能

    一.页面代码:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www. ...

  5. Ajax以及类似百度搜索框的demo

    public class Ajax01 extends HttpServlet{ @Override protected void service(HttpServletRequest request ...

  6. JavaScript实现模糊推荐的input框(类似百度搜索框)

    如何用JS实现一个类似百度搜索框的输入框呢,再填充完失去焦点时,自动填充配置项,最终效果如下图: 实现很简单,但是易用性会上升一大截,需要用到的有jquery-ui的autocomplete,jque ...

  7. vue 使用watch监听实现类似百度搜索功能

    watch监听方法,watch可以监听多个变量,具体使用方法看代码: HTML: <!doctype html> <html lang="en"> < ...

  8. 如何实现SP文档库类似百度文档库的效果 (副标题:如何在SP2013文档库的SWF文件用FlexPager显示)

    1. 编辑文档库列表显示页面,如下图: 2. 添加内容编辑器,如下图: 3. 添加如下在[内容编辑器中]-[编辑源],添加如下JS代码,如下图: ​ 代码如下: <scrip type=&quo ...

  9. Fort.js – 时尚、现代的表单填写进度提示效果

    Fort.js 是一款用于时尚.现代的表单填写进度提示效果的 JavaScript 库,你需要做的就是添加表单,剩下的任务就交给 Fort.js 算法了,使用非常简单.提供了Default.Gradi ...

随机推荐

  1. P1594 护卫队

    题目描述 护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥.因为街道是一条单行道,所以任何车辆都不能超车.桥能承受一个给定的最大承载量.为了控制桥上的交通,桥两边各站一个指挥员.护卫车队被分 ...

  2. hive 调优(一)coding调优

    本人认为hive是很好的工具,目前支持mr,tez,spark执行引擎,有些大公司原来封装的sparksql,开发py脚本,但是目前hive支持spark引擎(不是很稳定,建议Tez先),所以离线还是 ...

  3. Spring框架AOP

    aop技术是面向切面编程思想,作为OOP的延续思想添加到企业开发中,用于弥补OOP开发过程中的缺陷而提出的编程思想.AOP底层也是面向对象:只不过面向的不是普通的Object对象,而是特殊的AOP对象 ...

  4. Java并发指南12:深度解读 java 线程池设计思想及源码实现

    ​深度解读 java 线程池设计思想及源码实现 转自 https://javadoop.com/2017/09/05/java-thread-pool/hmsr=toutiao.io&utm_ ...

  5. IdentityServer4入门一

    这几天学习IdentityServer4,感觉内容有点乱,也可能自己水平有限吧.但为了巩固学习的内容,也打算自己理一下思路. 首先IdentityServer解决什么问题? 下图是我们的一个程序的组织 ...

  6. csp-s模拟90

    T1: 每格的不透明度相当与一个边权,转化为从起点到终点所有路径的最大值.实现最长路,最好用$dijk$. T2: 对于$N=100$,$M=8$,考虑状压$dp$.要用一种状态表示某一行的矩形覆盖情 ...

  7. java跨域配置

    一.问题 使用前后端分离模式开发项目时,往往会遇到这样一个问题 -- 无法跨域获取服务端数据 这是由于浏览器的同源策略导致的,目的是为了安全.在前后端分离开发模式备受青睐的今天,前端和后台项目往往会在 ...

  8. form表单无刷新提交

    Ajax最大的特点就是可以不刷新页面而实现数据的通信及更改页面信息.那么用AJAX进行后台通信传递字符串还是可以的,遇到上传文件该怎么办呢?基于安全考虑,JS是不能直接进行文件操作的,只好用原始的fr ...

  9. linux下的什么工具能将DVI文件转换成PostScript文件?

    答: dvips,此工具能将由Latex或Tex生成的DVI文件转换成PostScript文件,官网在此

  10. 手把手教你实现RecyclerView的下拉刷新和上拉加载更多

    手把手教你实现RecyclerView的下拉刷新和上拉加载更多     版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ...