文档章节

keyup模糊搜索提示框实现原理

白与黑
 白与黑
发布于 2014/06/26 16:57
字数 856
阅读 57
收藏 0
点赞 0
评论 0

大家在使用百度,google搜索的时候,出现的模糊搜索框应该很有感触,因为确实很方便,不只是搜索引擎需要用到这个模糊搜索框的提示功能,想很多购物网站,如果淘宝,天猫,只要规模稍微大点的网站,由于内容较多的时候,都会有搜索功能,当然如果搜索功能能带模糊搜索提示框的话,我想对用户体验将会是很大的提高。怎么做才能高效的实现只一个功能呢,今天我就用jquery来给大家做这样一个功能。


首先我们来看一下大部分人会用的写法:

请看DEMO

如果你觉得这种写法来实现这个功能,那就太不明智了,因为他非常的损耗性能,因为这个事件键盘弹起来的时候就会执行一次请求:

上面DEMO中当你们输入汉字的时候,文字拼音还没打完的时候,右边的提示框就已经开始执行你的请求了,这样一来,我们在打汉字的时候就文字还没打出来,就已经在执行ajax去服务器请求了,这样是极其损害性能的。

解决这个问题的办法我们可以给keyup事件加上一个延迟,等用户输入完一个完整的关键词的时候我们在进行请求,请看接下来的代码:

var lastTime;
	$("#search").keyup(function(event){	
		//我们可以用jQuery的event.timeStamp来标记时间,这样每次的keyup事件都会修改lastTime的值,lastTime必需是全局变量
		lastTime = event.timeStamp;
		setTimeout(function(){ 
			//如果时间差为0,也就是你停止输入0.5s之内都没有其它的keyup事件产生,这个时候就可以去请求服务器了
			if(lastTime - event.timeStamp == 0){
				/*
					在这里可以执行ajax请求
				*/	
				var $val = $("#search").val();
				$("#tip").html($val);					
			}
		},500);
	});

请看DEMO

大家测试下上面这个DEMO效果,在你输入完一个完整的词汇前他是不会发送请求的,其实上面的代码,不仅仅是靠setTimeout做了延迟,如果你写了延迟也是错的,因为他只是延迟了发送数据,即时你词汇打出来了之后,他还是会去执行kkkk这个数据的,关键的一个属性是jquery的event.timeStamp,我们来看下jquery api 提供的解释吧。

通过在代码中获得两个点之间的 event.timeStamp 值,并给出差值来分析事件的性能,此属性是很有用的。如果只是要确定当前的时间内的事件处理程序,使用(new Date).getTime()来代替。 
注意: 有一个 
bug open since 2004, 这个值是不正确填充在Firefox  它是不可能知道事件的时间,在该浏览器中创建。

<!DOCTYPE html>
<html>
<head>
  <style>
div { height: 100px; width: 300px; margin: 10px;
      background-color: #ffd; overflow: auto; }
</style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
 
<div>Click.</div>
<script>
var last, diff;
$('div').click(function(event) {
  if ( last ) {
    diff = event.timeStamp - last
    $('div').append('time since last event: ' + diff + '<br/>');
  } else {
    $('div').append('Click again.<br/>');
  }
  last = event.timeStamp;
});
</script>
 
</body>
</html>

只要理解了Jquery里面的这个event.timeStamp的用法,理解这个功能的实现方法就没什么问题了。

转载请注明来自520UEDhttp://www.520ued.com

本文转载自:http://www.520ued.com/article/index/arcid/27.html

共有 人打赏支持
白与黑
粉丝 0
博文 1
码字总数 0
作品 0
海淀
程序员
jQuery+PHP打造网页搜索框功能

例如在百度上有个很使用的功能,就是用户在搜索的时候会自动提示相关搜索条件以供选择,非常人性化的设计,我们如何将此功能放到自己的项目中呢,经过一番研究,终于实现了此功能,分享给eve...

crossmix
2015/09/18
112
0
基于jquery实现的类似百度搜索的输入框自动完成功能

自动完成功能是指:类似百度搜索之类的输入一个词的一部分后就自动提示,然后用户可以选择,不需要再输入剩余部分。废话不多说,直观的看一下:   实现这个功能需要服务端配合。客户端通过...

凯文加内特
2014/06/25
0
3
LDMING/Textbox2

#Textbox2 目录 背景介绍 项目介绍 使用说明 获取代码 背景介绍 本人是一名asp.net开发人员,所在公司的项目大多是一些管理系统。 在开发这些管理系统时,经经常遇到以下问题。 1.这个表单项...

LDMING
2015/10/30
0
0
ECS控制台实例搜索的优化与改进

摘要: 搜索功能是控制台非常重要的功能,承载着实例管理入口的作用,应该好用,快速和准确。然而,ECS控制台实例列表的搜索功能经常被吐槽不好用,痛点主要有以下三点: 每次搜索之前需要选...

阿里云云栖社区
03/26
0
0
仿百度搜索框自动完成提示功能

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <style> aut......

bengozhong
2016/11/16
33
0
如何在WP7应用中手动关闭软键盘(翻译)

原文链接:http://windowsphonegeek.com/tips/How-to-hide-the-soft-keyboard-in-a-Windows-Phone-app 这篇文章我们谈谈如何监测当用户按下enter键后自动关闭Windows Phone 7的软键盘。 step...

junwong
2012/02/16
700
0
百度地图BMap API的应用实例

前几天,帮朋友做了几款地图API接口调研,推荐他使用百度BMap和谷歌GMap API,后来又直接交由我来替他做 一来上周帮研究生部老师做的学位证书精准打印系统基本完工,晚上有点时间研究下js 二...

长平狐
2013/01/06
20K
2
JavaWeb15-HTML篇笔记(三)

1.1 案例三:使用JQuery完成仿百度的信息提示:1.1.1 需求: 在一个搜索页面中,键盘输入一些信息,在文本框下面给出一些提示信息(需要从服务器端进行查询的). 1.1.2 分析:1.1.2.1 步骤分析: ...

我是小谷粒
06/01
0
0
编写更加通用的 JavaScript

当你准备好抽象出一个 Web 组件的时候, JavaScript 能帮你做到,融入组件的 JavaScript 变得优雅利索;此时它像一把瑞士军刀,轻松帮你应对各种场景。但当你急于交付时,JavaScript 也能帮你...

红薯
2011/02/10
653
8
关于keydown与keyup所犯过的一些小错误

昨天在写界面的时候,想实现一个功能,就是在文本框输入时,自动计算字数: 一开始,我的想法是这样的,给文本框添加个事件keydown,当点击键盘是,自动就算文本框里面字符的长度,这时候就出...

changelin
2014/07/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python3.6用的外库遇到的问题

要用到wmi库 pip install wmi 装后不能用还要安装pywin32库。 要用到crypto加密模块安装pip instal pycrypto装后不能用。要安装pycryptodome。...

oisan_
10分钟前
0
0
select, poll, epoll I/O复用介绍

什么是I/O复用? 内核监视多个文件描述符(I/O文件句柄),一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知应用程序进行相应的读写操作。 I/O多路复用又被称为“事件驱动”(比如读写事...

xiaoxlm
11分钟前
0
0
【Spring 系列 给IOC容器添加组件的几种方式总结】

给Spring 注册Bean的几种方式总结。其中使用@Import注解是Spring Boot 完成自动配置的一个核心注解。 1、Spring 中给IOC容器添加组件的几种方式 在Spring的配置文件中,配置Bean(基于XML方式...

HansonReal
12分钟前
3
0
bootstrapTable语言包设置

###方法一引入不同的语言包 <script src="bootstrap-table-zh-CN.js"></script> ###方法二引入全语言包 <script src="bootstrap-table-locale-all.min.js"></script>//然后在初始化前设计默......

momo1987
13分钟前
0
0
Saltstack 常用命令

1、拷贝文件到客户端 # salt 'slaver.test.com' cp.get_file salt://apache.sls /tmp/cp.txt 2、拷贝目录到客户端 # salt 'slaver.test.com' cp.get_dir salt://test /tmp 3、显示存活的客户......

硅谷课堂
13分钟前
0
0
致初学者-如何学好Python这门编程语言?[图]

致初学者-如何学好Python这门编程语言?[图]: 对于很多Python3初学者,往往会面临以下问题:Python2和Python3我该学习哪一个?是否要安装Linux系统学习Python?Python3有各种版本我该安装哪...

原创小博客
16分钟前
1
0
E31---setopt=protected_multilib=false

今天在云服务器上装nginx,需要先安装一些依赖库比如zlib, ,但是安装zlib时候报错。 yum install -y zlib zlib-devel 1 (-y 指的是如果需要选yes no的自动y)下面是报错 Protected multil...

侠客行之石头
20分钟前
0
0
HTTP常见面试题

Http与Https的区别: HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头 HTTP 是不安全的,而 HTTPS 是安全的 HTTP 标准端口是80 ,而 HTTPS 的标准端口是443 在OSI 网络模型中,H...

JK_OPERA
22分钟前
0
0
python爬取站长素材网页图片保存到ppt中

网站地址:http://sc.chinaz.com/tupian/index.html 直接上代码: import requestsfrom bs4 import BeautifulSoupfrom pptx import Presentationfrom pptx.util import Inchesimpor......

你为什么不吃药
23分钟前
1
0
Ubuntu 18.04 swap空间的修改

一、准备工作 执行“sudo swapon -s”命令,查看是否已经存在swap file 二、修改swap file # 如果第一步存在swapfile则需要先禁用sudo swapoff /swapfile# 修改swap 空间的大小为2Gs...

Iceberg_XTY
26分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部