keyup实现在输入状态不发送搜索请求,停止输入后发送
个人需求:通过keyup事件配合后台elasticsearch(弹性搜索),用户在输入状态不发送请求,等停止输入后发送请求。
这是个思考笔记,因为项目临时需要弹性搜索功能,所以临时想了这么个法子,方法比较大众还望大神多多指点。
我的原文地址:http://www.cnblogs.com/mingxinice/p/keyupSearch.html
我用的原生方法,通过时间戳+定时器+一个全局变量实现。代码量很少比较易懂。
CSS:(记录一下比较喜欢的input样式)
input{
width:300px;
height: 32px;
color: #5c5c5c;
font-size: 14px;
box-sizing: border-box;
border: 1px solid #ddd;
border-radius: 3px;
padding-left: 10px;
}
input:focus{
border: 1px solid #007cdc;
outline: none;
-webkit-box-shadow: 0px 0px 6px #007cdc;
-moz-box-shadow: 0px 0px 6px #007cdc;
box-shadow: 0px 0px 6px #007cdc;
-webkit-transition: border linear .2s,box-shadow linear .2s;
-moz-transition: border linear .2s,box-shadow linear .2s;
-o-transition: border linear .2s,box-shadow linear .2s;
transition: border linear .2s,box-shadow linear .2s;
}
HTML:
<input id='keyDom' type="text"/>
JavaScript:
var keyDom = document.getElementById('keyDom');
//全局的一个变量,可被每次触发的事件函数重新修改赋值
var lastTimeStamp = 0;
keyDom.addEventListener('keyup',function(event){
//标记当前事件函数的时间戳
lastTimeStamp = event.timeStamp;
//800ms后比较二者是否还相同(因为只要还有事件触发,lastTimeStamp就会被改写,不再是当前事件函数的时间戳)
setTimeout(function(){
if(lastTimeStamp == event.timeStamp){
alert('发送请求');
};
},800);
},false);
注释:
1.用户输入动作触发keyup事件,并调用事件函数。事件函数被调用后会生成对应的event.timeStamp,这个值在事件函数体内一直不会变。
2.将这个值复赋给全局中定义的lastTimeStamp。这个lastTimeStamp是一个全局的变量,这样这个值在每次事件触发时都会被改变。
3.如果在1000ms内,lastTimeStamp这个值被其他事件函数重新赋值修改,(同函数因触发事件被调用多次)则lastTimeStamp != event.timeStamp;说明还在输入。不走ajax请求。
4.若1000ms内不再触发事件,不再调用事件函数。
5.lastTimeStamp被本次事件函数赋值一次后,没有再被改写。则说明,此时不再输入或有间歇。lastTimeStamp==event.timeStamp。发送ajax请求。

功力不深,望老司机多留些方法~
keyup实现在输入状态不发送搜索请求,停止输入后发送的更多相关文章
- 【vue】vue +element 搭建项目,实现实时输入效果时停止输入后发送请求
1.实现的效果 输入关键字后,根据输入的关键字实时显示搜索的结果,按回车键时也进行搜索 2.原理: 通过时间戳+定时器+一个全局变量实现.代码量很少比较易懂. 用户输入时触发keyup事件,并调用事件 ...
- axios 发送post请求的时候会发送两次
第一次发送的时候会先发送OPTIONS, 第二次才发送POST, 解决方法: 引用qs模块 安装qs依赖 npm install qs --save 引入qs依赖 import qs from 'qs ...
- 05: 使用axios/vue-resource发送HTTP请求
1.1 axios 简介与安装 1.axios简介 1. vue本身不支持发送AJAX请求,需要使用vue-resource.axios等插件实现 2. axios是一个基于Promise的HTTP请 ...
- python发送requests请求时,使用登录的token值,作为下一个接口的请求头信息
背景介绍: 发送搜索请求时,需要用到登录接口返回值中的token值 代码实现: 登录代码: 搜索接口:
- requests:用于发送http请求,专为人类设计
介绍 requests模块是一个专门用来发送http请求的模块 如何发送请求 import requests """ 使用requests模块发送请求非常简单 首先请求有 ...
- Qt发送HTTP请求
http://hi.baidu.com/cmdmac/item/c45b9f0fb0d0938802ce1bbd 最近在搞QT跟服务器交互的东西,自然少不了发送和接受HTTP请求.在网上找了一些资料知 ...
- socket编程发送GET请求
可以根据几根url地址,分析出主机,地址,协议等,然后用封装成的类拼接成GET请求信息,用fsockopen连接主机,进行读取操作,获取响应信息,打印 <?php //http连接接口 inte ...
- python接口自动化(八)--发送post请求的接口(详解)
简介 上篇介绍完发送get请求的接口,大家必然联想到发送post请求的接口也不会太难,被聪明的你又猜到了.答案是对的,虽然发送post请求的参考例子很简单,但是实际遇到的情况却是很复杂的,因为所有系统 ...
- java 模拟浏览器发送post请求
java使用URLConnection发送post请求 /** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求 ...
随机推荐
- C#小知识点记录,对象的深拷贝
在CSDN中的定义是: public static string CompareExchange( ref string location1, string value, string compara ...
- java复习(1)---java与C++区别
[系列说明]java复习系列适宜有过java学习或C++基础或了解java初步知识的人阅读,目的是为了帮助学习过java但是好久没用已经遗忘了的童鞋快速捡起来.或者教给想快速学习java的童鞋如何应用 ...
- .net之简单工厂模式
//抽象一个生产笔的方法 namespace simpleFactory{ public abstract class AbstractPen { public abstract void creat ...
- 内存管理之slab分配器
基本思想 与传统的内存管理模式相比, slab 缓存分配器提供了很多优点.首先,内核通常依赖于对小对象的分配,它们会在系统生命周期内进行无数次分配.slab 缓存分配器通过对类似大小的对象进行缓存而提 ...
- SCP“免密” 远程COPY较多文件
一.linux脚本实现自动输入密码 使用Linux的程序员对输入密码这个举动一定不陌生,在Linux下对用户有严格的权限限制,干很多事情越过了权限就得输入密码,比如使用超级用户执行命令,又比如ftp. ...
- Hadoop化繁为简-从安装Linux到搭建集群环境
简介与环境准备 hadoop的核心是分布式文件系统HDFS以及批处理计算MapReduce.近年,随着大数据.云计算.物联网的兴起,也极大的吸引了我的兴趣,看了网上很多文章,感觉还是云里雾里,很多不必 ...
- Linux下memcache的安装和启动测试
memcache是一套分布式的高速缓存系统,MemCache的工作流程如下:先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作:如果请求的数据不在me ...
- 拖拽系列一、JavaScript实现简单的拖拽效果
前端拖拽相关应用汇总 在现实生活中就像男孩子牵着(拖着)女朋友的手穿过马路:从马路的一端走到另一端这种场景很常见: 而在前端开发中拖拽效果也算是前端开发中应用最常见.最普遍的特效:其拖拽涉及知 ...
- POJ2635-The Embarrassed Cryptographer 大数求余
题目链接:http://poj.org/problem?id=2635 题目分析: http://blog.csdn.net/lyy289065406/article/details/6648530
- java图片上传(mvc)
最近有开始学起了java,好久没写文章了,好久没来博客园了.最近看了看博客园上次写的图片上传有很多人看,今天在一些篇关于java图片上传的.后台接收用的是mvc.不墨迹了,直接上图. 先看目录结构.i ...