基于jquery实现的类似百度搜索的输入框自动完成功能

2020-05-19 07:42:30易采站长站整理

废话不多说,直观的看一下:


  实现这个功能需要服务端配合。客户端通过脚本来展示从服务端取得的数据。


  先看客户端的HTML:
 
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” 
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”> 
<html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”en” lang=”en”> 
<head> 
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> 
<title>搜索词自动完成</title> 
<style type=”text/css”> 
#search{ 
text-align: center;
position:relative;
}
.autocomplete{
border: 1px solid #9ACCFB;
background-color: white;
text-align: left;
}
.autocomplete li{
list-style-type: none;
}
.clickable {
cursor: default;
}
.highlight {
background-color: #9ACCFB;
}
</style>
<script type=”text/javascript” src=”jquery.js”></script>
<script type=”text/javascript”>
$(function(){
//取得div层
var $search = $(‘#search’);
//取得输入框JQuery对象
var $searchInput = $search.find(‘#search-text’);
//关闭浏览器提供给输入框的自动完成
$searchInput.attr(‘autocomplete’,’off’);
//创建自动完成的下拉列表,用于显示服务器返回的数据,插入在搜索按钮的后面,等显示的时候再调整位置
var $autocomplete = $(‘<div class=”autocomplete”></div>’)
.hide()
.insertAfter(‘#submit’);
//清空下拉列表的内容并且隐藏下拉列表区
var clear = function(){
$autocomplete.empty().hide();
};
//注册事件,当输入框失去焦点的时候清空下拉列表并隐藏
$searchInput.blur(function(){
setTimeout(clear,500);
});
//下拉列表中高亮的项目的索引,当显示下拉列表项的时候,移动鼠标或者键盘的上下键就会移动高亮的项目,想百度搜索那样
var selectedItem = null;
//timeout的ID
var timeoutid = null;
//设置下拉项的高亮背景
var setSelectedItem = function(item){
//更新索引变量
selectedItem = item ;
//按上下键是循环显示的,小于0就置成最大的值,大于最大值就置成0
if(selectedItem < 0){
selectedItem = $autocomplete.find(‘li’).length – 1;
}
else if(selectedItem > $autocomplete.find(‘li’).length-1 ) {
selectedItem = 0;
}
//首先移除其他列表项的高亮背景,然后再高亮当前索引的背景
$autocomplete.find(‘li’).removeClass(‘highlight’)