自动完成的搜索框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 对象成员的可见性说明
Oct 16 Javascript
得到jQuery detach()后节点中的某个值实现代码
Feb 05 Javascript
jquery动态添加删除一行数据示例
Jun 12 Javascript
JavaScript实现简单图片翻转的方法
Apr 17 Javascript
微信小程序 textarea 组件详解及简单实例
Jan 10 Javascript
bootstrap网格系统使用方法解析
Jan 13 Javascript
mongoose更新对象的两种方法示例比较
Dec 19 Javascript
如何在JavaScript中优雅的提取循环内数据详解
Mar 04 Javascript
详解Vue中CSS样式穿透问题
Sep 12 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
Feb 11 Javascript
ant-design-vue中tree增删改的操作方法
Nov 03 Javascript
vue-cli中实现响应式布局的方法
Mar 02 Vue.js
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
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
zf框架db类的分页示例分享
2014/03/14 PHP
兼容PHP和Java的des加密解密代码分享
2014/06/26 PHP
PHP遍历数组的方法汇总
2015/04/30 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
Javascript 跨域访问解决方案
2009/02/14 Javascript
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
jQuery性能优化的38个建议
2014/03/04 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
PHP webshell检查工具 python实现代码
2009/09/15 Python
python实现备份目录的方法
2015/08/03 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
django 微信网页授权登陆的实现
2019/07/30 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
医学生自荐信范文
2013/12/03 职场文书
校园报刊亭的创业计划书
2014/01/02 职场文书
学校端午节活动方案
2014/08/23 职场文书
团组织推优材料
2014/12/29 职场文书