AJAX实现类似百度的搜索提示,自动补全和键盘、鼠标操作
<script type="text/javascript">
$(document).ready(function(){
var highlightIndex = -1;
$("#name").bind("keyup", function(event){
document.getElementById("auto").style.display='block';
var keyCode = event.keyCode;
$("#log").html(keyCode);
if(keyCode >= 65 && keyCode <=90 || keyCode == 8 || keyCode == 46 || keyCode==32){
//输入字母,退格或删除,显示最新的内容
var enteredName = $("#name").val();
if(typeof(enteredName) == undefined ||
enteredName==""){
return ;
}
$.ajax({
type: 'post',
url : '/ajax/ajax_building_listNames.action',
data:{'enteredName':enteredName},
success : function(data) {
$("#auto").html("");
if(data && data.length > 0){
var autoNode = $("#auto");
for(var i = 0; i < data.length; i++){
var newNode = $("<div>").attr("id", i);
newNode.html(data[i]).appendTo(autoNode);
newNode.mouseover(function(){
$(this).css("background-color","gray");
highlightIndex = $(this).attr("id");
//alert(highlightIndex);
});
newNode.mouseout(function(){
$(this).css("background-color","white");
});
newNode.click(function(){
$("#name").attr("value", $(this).text());
hightlightIndex = -1;
document.getElementById("auto").style.display='none'; });
};
}
}
});
}else if(keyCode == 13){
if(highlightIndex != -1){
var selectNode = $("#auto").children("div").eq(highlightIndex);
if(selectNode){
$("#name").attr("value", $(selectNode).text());
document.getElementById("auto").style.display='none';
}
} }else if(keyCode == 40 || keyCode == 38){
if(keyCode == 40){
//如果是向下
var autoNodes = $("#auto").children("div");
if(highlightIndex != -1){
//对当前选中的下一项的操作
var selectNode = autoNodes.eq(highlightIndex+1);
if(selectNode){
$("#name").attr("value", $(selectNode).text());
//改变当前高亮的索引值,让当前选中高亮
selectNode.css("background-color","gray");
//当前被选中去掉高亮
var selectNode = autoNodes.eq(highlightIndex);
selectNode.css("background-color","white");
}
}else if(highlightIndex == -1){
var selectNode = autoNodes.eq(highlightIndex+1);
selectNode.css("background-color","gray");
}
highlightIndex++; if(highlightIndex==autoNodes.length){
//如果索引值等于提示框中内容的数组长度,则指向最头一个元素
autoNodes.eq(highlightIndex).css("background-color","white");
highlightIndex = 0;
autoNodes.eq(highlightIndex).css("background-color","gray");
$("#name").attr("value", autoNodes.eq(highlightIndex).text()); } }
if(keyCode == 38){
//如果是向上
var autoNodes = $("#auto").children("div");
if(highlightIndex != -1){
//对当前选中的上一项的操作
var selectNode = autoNodes.eq(highlightIndex-1);
if(selectNode){
$("#name").attr("value", $(selectNode).text());
//改变当前高亮的索引值,让当前选中高亮
selectNode.css("background-color","gray");
//当前被选中去掉高亮
var selectNode = autoNodes.eq(highlightIndex);
selectNode.css("background-color","white");
}
highlightIndex--;
}else if(highlightIndex == -1){
//如果索引值为-1,则指向最后一个元素
highlightIndex = autoNodes.length-1;
autoNodes.eq(highlightIndex).css("background-color","gray");
}
}
}
}); //隐藏自动补全框,并定义css属性
$("#auto").css("position","absolute")
.css("z-index", 9999)
.css("background-color", "white")
.css("border","1px black solid")
.css("top",$("#name").offset().top + $("#name").height() + 5 + "px")
.css("left",$("#name").offset().left + "px")
.width($("#name").width() + 2);
});
}
});
</script>
AJAX实现类似百度的搜索提示,自动补全和键盘、鼠标操作的更多相关文章
- 第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能
第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.e ...
- 四十七 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能
elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/se ...
- Vim使用YouCompleteMe达到类似IDE的代码提示、补全,以及其他实用设置
接触Linux有两年了,vim还是只会简单的操作.最近实在受不了sublime的代码提示,决定花点时间来配置下vim.本文讲自己认为方便的vim配置,称不上完美,只讲究简单实用. 使用 ctags 主 ...
- angular-ui-bootstrap typeahead 智能提示 自动补全 获取焦点不触发问题的解决
项目中有一处使用了angular-ui-bootstrap中的typeahead来实现输入框智能提示语自动化补全的功能,存在一个bug, 即输入文字后,当再次点击文本框,其获取焦点后并不会触发智能提示 ...
- jQuery搜索框自动补全功能插件实现-autocomplete.js
最近用nodeclub实现股票的输入关键字自动补全股票信息进行搜索功能,原先用jQuery-ui,结果jQuery-ui库太大,所以考虑用其他插件,最终选择使用autocomplete.js,控件简单 ...
- 【Eclipse】eclipse自动提示+自动补全
解决代码的自动提示问题: 1.打开 Eclipse -> Window -> Perferences 2.找到Java 下的 Editor 下的 Content Assist , 右边出现 ...
- 【学习】eclipse自动提示+自动补全
解决代码的自动提示问题: 1.打开 Eclipse -> Window -> Perferences 2.找到Java 下的 Editor 下的 Content Assist , 右边出现 ...
- 使用Bootstrap typeahead插件实现搜索框自动补全的配置参数。
示例代码: <input type="text" id="addr"/> <input type="text" hidde ...
- 使用jqueryUI和corethink实现的类似百度的搜索提示
代码:http://download.csdn.net/detail/u012995856/9676845 效果: 目录: 这里是以corethink模块的形式,只需要安装上访问 index.php? ...
随机推荐
- cocos2dx的runAction: 反复运行,多个动作连接运行,多个动作同一时候运行的实现
cocos2dx的 runAction,假设某个动作重复运行用cc.RepeatForever:create, 多个动作连接运行用cc.Sequence:create,多个动作同一时候运行用cc.Sp ...
- 西门子PLC学习笔记二-(工作记录)
今天师傅给讲了讲做自己主动化控制的总体的思路,特进行一下记录,做个备忘. 1.需求分析 本次的项目是对楼宇循环供水的控制,整个项目须要完毕压力.压差.温度等的获取及显示.同一时候完毕电机的控制. 2. ...
- RGB,CMYK,HSB各种颜色表示的转换 C#语言
Introduction Why an article on "colors"? It's the same question I asked myself before writ ...
- centos安装vim7.4
转载于:http://www.cnblogs.com/nhlinkin/p/3545509.html 系统版本centos6.4; root权限 su - root 卸载 $ rpm - ...
- C# 网络编程 Part.1
本人也是新手,对网络编程一窍不通,所以从今天开始我将学习网络编程的基础知识,在此一一贴出来,编辑成一个系列! 1.为自己复习巩固用 2.可以找到同时在学习网络编程的同学,一起讨论交流,促进学习效率及其 ...
- SQL Server 基础 05 多链表查询和子查询
连接查询 值得注意的是:字段前必须加表名,以便混淆 -- 多表连接查询和子查询 select * from dbo.stu_info ,dbo.sname2 -- 加连接规则的查询 where se ...
- DDL\DML\DCL\DQL
[DML] DML = Data Manipulation Language,数据操纵语言,命令使用户能够查询数据库以及操作已有数据库中的数据的计算机语言.具体是指是UPDATE更新.INSERT插入 ...
- JavaScript:获取系统当前时间,构造格式化的字符串
var getNowFormatDate = function() { var date = new Date(); var seperator1 = "-"; ...
- 引用 模块编译Makefile模板
本文转载自geyingzhen<模块编译Makefile模板> 引用 geyingzhen 的 模块编译Makefile模板 ifneq ($(KERNELRELEASE), ) // ...
- HttpComponents 也就是以前的httpclient项目
HttpComponents 也就是以前的httpclient项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端/服务器编程工具包,并且它支持 HTTP 协议最新的版本和建议.不 ...