自动完成的搜索框javascript实现


Posted in Javascript onFebruary 26, 2016

在很多需要搜索的网站, 都会有一个自动完成的搜索框. 方便用户查找他们想要的搜索词. 帮助用户快速找到自己想要的结果. 这种方式是比较友好的. 所以是比较提倡使用的.

我们这次就来实现这一效果. 我们通过两篇文章来进行讲解. 首先我们来完成界面的设计布局.

界面的HTML结构, 第一个少不了的是一个搜索框, 第二个就是搜索的点击按钮.

<div class="search">
     <input type="text" value="">
     <button>搜索</button>
 </div>

这就是最简单的搜索框的设计. 那CSS代码怎么处理. 以前用得多的是使用float来进行处理, 然后给搜索框一个边框,设置一个padding. 然后给按钮去除边框,设置一个背景. 这里我们使用flex布局方式. 这样更简便点. 不用考虑清除浮动效果.当然这里就要考虑兼容性问题了.

.search {
  display: inline-flex;
  height: 35px;
  margin: 50px auto;
  position: relative;
}
.search input {
  border: #eee 1px solid;
  background-color: #fff;
  outline: none;
  width: 200px;
  padding: 0 5px;
}
.search button {
  background-color: #ff3300;
  color: #fff;
  border: none;
  width: 80px;
}

这时候我们继续往下考虑, 如果用户输入了关键词, 那就得显示一个列表的相关词语. 那这时候我们需要加入一个词语列表.
比如

<ul>
  <li><a href="#">武林外传</a> </li>
  <li><a href="#">葵花宝典</a> </li>
  <li><a href="#">如来佛掌</a> </li>
  <li><a href="#">九阴白骨爪</a> </li>
</ul>

我们将这行代码追加到.search的内容后面.然后设置CSS代码, 我们设置他的最小宽度为.search宽度减去搜索按钮的宽度.这样就跟搜索框一样宽.

.search ul {
  position: absolute;
  left: 0;
  top: 35px;
  border: #eee 1px solid;
  min-width: calc(100% - 80px);
  text-align: left;
}
.search ul a {
  display: block;
  padding: 5px;
}

这得在CSS代码之前, 将默认的一些浏览器样式清除.最后效果如下.

自动完成的搜索框javascript实现

好了.下面我们完成JS的代码控制.
我们来分析下, 其中的事件. 用户在输入框输入文字后, 将输入的文字与后台数据做查询, 查询到后返回给客户端, 然后将返回的数据显示在数据列表下.

根据这个步骤, 我们首先是获取输入框标签, 给这个标签添加onkeyup事件

var ele_key = document.getElementById("key");
 ele_key.onkeyup = function (e) {
   //处理事件
 }

这里我们模拟一个后台数据, 这里用数据来表示,然后加入一些数据

var data = ["编程的人", "武林外传", "葵花宝典", "九阴白骨爪", "武林江湖", "will"];

后台数据有了, 事件也添加了. 这时候我们对数据进行处理了.
首先是获取用输入的数据, 来然后与后台数据进行比较. 然后将比较后的数据保存在一个数据里面.

//定义一些数据
var data = ["编程的人", "武林外传", "葵花宝典", "九阴白骨爪", "武林江湖", "will"];
var ele_key = document.getElementById("key");
ele_key.onkeyup = function (e) {

  var val = this.value;

  //获取输入框里匹配的数据
  var srdata = [];
  for (var i = 0; i < data.length; i++) {
    console.log(data[i].indexOf(val))
    if (val.trim().length > 0 && data[i].indexOf(val) > -1) {
       srdata.push(data[i]);
    }
  }

 }

继续往下分析, 目前我们获取到后台查询到的数据后, 那就得将这个数据显示给用户查看, 这里我们显示在数据列表中.

//定义一些数据
var data = ["编程的人", "武林外传", "葵花宝典", "九阴白骨爪", "武林江湖", "will"];
var ele_key = document.getElementById("key");
ele_key.onkeyup = function (e) {

  var val = this.value;

  //获取输入框里匹配的数据
  var srdata = [];
  for (var i = 0; i < data.length; i++) {
    console.log(data[i].indexOf(val))
    if (val.trim().length > 0 && data[i].indexOf(val) > -1) {
       srdata.push(data[i]);
    }
  }

 //获取到的数据准备追加显示, 前期要做的事情: 清空数据,然后显示数据列表,如果获取到的数据为空,则不显示
  var ele_datalist = document.getElementById("datalist");
  ele_datalist.style.visibility = "visible";
  ele_datalist.innerHTML = "";

  if (srdata.length == 0) {
    ele_datalist.style.visibility = "hidden";
  }

  //将搜索到的数据追加到显示数据列表, 然后每一行加入点击事件, 点击后将数据放入搜索框内, 数据列表隐藏
  var self = this;
  for (var i = 0; i < srdata.length; i++) {
    var ele_li = document.createElement("li");
    var ele_a = document.createElement("a");
    ele_a.setAttribute("href", "javascript:;");
    ele_a.textContent = srdata[i];

    ele_a.onclick = function () {
       self.value = this.textContent;
      ele_datalist.style.visibility = "hidden";
    }


    ele_li.appendChild(ele_a);
    ele_datalist.appendChild(ele_li);
  }

 }

在添加数据到列表中时, 我们首先对数据列表做初始化处理,避免重复数据的添加. 其次就是我们给数据列表的每一行添加了一个点击事件,点击后将数据放入搜索框内, 数据列表隐藏.

在这里整个自动完成的搜索框就完成了.我们来测试下效果.

自动完成的搜索框javascript实现

这里可能是录制软件问题, 边框与它录制的背景颜色应该一样了. 边框不见了(⊙?⊙)b
以上就是JAVASCRIPT实现搜索框的自动完成效果,大家可以自己测试玩玩!

Javascript 相关文章推荐
介绍JavaScript中Math.abs()方法的使用
Jun 14 Javascript
JS实现选择TextArea内文本的方法
Aug 03 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
Sep 01 Javascript
JavaScript代码性能优化总结(推荐)
May 16 Javascript
canvas实现图像布局填充功能
Feb 06 Javascript
快速搭建vue2.0+boostrap项目的方法
Apr 09 Javascript
菊花转动的jquery加载动画效果
Aug 19 jQuery
Layui Form 自定义验证的实例代码
Sep 14 Javascript
webpack3升级到webpack4遇到问题总结
Sep 30 Javascript
Jquery ajax书写方法代码实例解析
Jun 12 jQuery
uin-app+mockjs实现本地数据模拟
Aug 26 Javascript
基于js实现的图片拖拽排序源码实例
Nov 04 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
Feb 26 #Javascript
js去字符串前后空格的实现方法
Feb 26 #Javascript
js判断鼠标位置是否在某个div中的方法
Feb 26 #Javascript
超实用的JavaScript表单代码段
Feb 26 #Javascript
理解javascript中Map代替循环
Feb 26 #Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
Feb 26 #Javascript
学习使用jquery iScroll.js移动端滚动条插件
Mar 24 #Javascript
You might like
一个简单实现多条件查询的例子
2006/10/09 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
用Laravel轻松处理千万级数据的方法实现
2020/12/25 PHP
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
angular 服务随记小结
2019/05/06 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
Python访问纯真IP数据库脚本分享
2015/06/29 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
HTML5 weui使用笔记
2019/11/21 HTML / CSS
财务部绩效考核方案
2014/05/04 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
通知函格式范文
2015/04/27 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书