`

jquery 模拟类搜索框自动完成搜索提示功能

 
阅读更多
autopoint.js代码:
代码如下:
/*
* @date: 2010-5-22 21:42:15
* @author: 胡灵伟
* Depends:
* jquery.js
*
* function:类似GOOGLE搜索框提示功能
*/
(function($) {
$.fn.autopoint = function (options) {
defaults = {
url:options.url,
keyLeft : 37,//向左方向键
keyUp : 38,//向上方向键
keyRight : 39,//向右方向键
keyDown : 40,//向下方向键
keyEnter : 13,//回车键
listHoverCSS : 'jhover',//提示框列表鼠标悬浮的样式
tpl : '<div class="list"><div class="word">{word}</div><div class="view">约{view}条记录</div></div>',
topoffset:options.topoffset||5
};
var options = $.extend(defaults, options);
var dropDiv = $('<div></div>').addClass('dropDiv').appendTo('body');
var isOver = false;
dropDiv.hover(function(){
isOver = true;
}, function(){
isOver = false;
});
return this.each(function(){
var pa = $(this);
$(this).bind('keydown', function(event){
if (dropDiv.css('display') != 'none') {//当提示层显示时才对键盘事件处理
var currentList = dropDiv.find('.' + options.listHoverCSS);
if (event.keyCode == options.keyDown) {//如果按的是向下方向键
if (currentList.length == 0) {
//如果提示列表没有一个被选中,则将列表第一个选中
$(this).val(getPointWord(dropDiv.find('.list:first')
.mouseover()));
} else if (currentList.next().length == 0) {
//如果是最后一个被选中,则取消选中,即可认为是输入框被选中
unHoverAll();
} else {
unHoverAll();
//将原先选中列的下一列选中
if (currentList.next().length != 0)
$(this).val(getPointWord(currentList.next()
.mouseover()));
}
return false;
} else if (event.keyCode == options.keyUp) {//如果按的是向上方向键
if (currentList.length == 0) {
$(this).val(getPointWord(dropDiv.find('.list:last')
.mouseover()));
} else if (currentList.prev().length == 0) {
unHoverAll();
} else {
unHoverAll();
if (currentList.prev().length != 0)
$(this).val(getPointWord(currentList.prev()
.mouseover()));
}
return false;
}else if(event.keyCode == options.keyEnter) dropDiv.empty().hide();
}
//当按下键之前记录输入框值,以方便查看键弹起时值有没有变
$(this).attr('alt', $(this).val());
}).bind('keyup', function(event){
//如果弹起的键是向上或向下方向键则返回
if(event.keyCode == options.keyDown||event.keyCode == options.keyUp) return;
if($(this).val() == ''){
dropDiv.empty().hide();
return;
}
//若输入框值没有改变或变为空则返回
if ($(this).val() == $(this).attr('alt'))
return;
getData(pa, $(this).val());
}).bind('blur', function(){
if(isOver&&dropDiv.find('.' + options.listHoverCSS)!=0) return;
//文本输入框失去焦点则清空并隐藏提示层
dropDiv.empty().hide();
});
/**处理ajax返回成功的方法**/
handleResponse = function(parent, json) {
var isEmpty = true;
for(var o in json){
if(o == 'data') isEmpty = false;
}
if(isEmpty) {
showError("返回数据格式错误,请检查请求URL是否正确!");
return;
}
if(json['data'].length == 0) {
//返回数据为空
return;
}
refreshDropDiv(parent, json);
dropDiv.show();
}
/**处理ajax失败的方法**/
handleError = function(error) {
//showError("由于url错误或超时请求失败!");
}
showError = function(error){
alert(error);
}
/**通过ajax返回json格式数据生成用来创建dom的字符串**/
render = function(parent, json) {
var res = json['data'] || json;
var appendStr = '';
//用json对象中内容替换模版字符串中匹配/\{([a-z]+)\}/ig的内容,如{word},{view}
for ( var i = 0; i < res.length; i+=1) {
appendStr += options.tpl.replace(/\{([a-z]+)\}/ig, function(m, n) {
return res[i][n];
});
}
jebind(parent, appendStr);
}
/**将新建dom对象插入到提示框中,并重新绑定mouseover事件监听**/
jebind = function(parent, a) {
dropDiv.append(a);
dropDiv.find('.list').each(function() {
$(this).unbind('mouseover').mouseover(function() {
unHoverAll();
$(this).addClass(options.listHoverCSS);
}).unbind('click').click(function(){
parent.val(getPointWord($(this)));
dropDiv.empty().hide();
parent.focus();
});
});
}
/**将提示框中所有列的hover样式去掉**/
unHoverAll = function() {
dropDiv.find('.list').each(function() {
$(this).removeClass(options.listHoverCSS);
});
}
/**在提示框中取得当前选中的提示关键字**/
getPointWord = function(p) {
return p.find('div:first').text()
}
/**刷新提示框,并设定样式**/
refreshDropDiv = function(parent, json) {
var left = parent.offset().left;
var height = parent.height();
var top = parent.offset().top + options.topoffset + height;
var width = options.width || parent.width() + 'px';
dropDiv.empty();
dropDiv.css( {
'border' : '1px solid #FE00DF',
'left' : left,
'top' : top,
'width' : width
});
render(parent, json);
//防止ajax返回之前输入框失去焦点导致提示框不消失
parent.focus();
}
/**通过ajax向服务器请求数据**/
getData = function(parent, word) {
$.ajax( {
type : 'GET',
data : "word="+ word,
url : options.url,
dataType : 'json',
timeout : 1000,
success : function(json){handleResponse(parent, json);},
error : handleError
});
}
});
}
})(jQuery);

网页上主要样式:
代码如下:
<style type="text/css">
.dropDiv {
position: absolute;
z-index: 10;
display: none;
cursor: hand;
}
.dropDiv .jhover {
background-color: #00FEDF;
}
.dropDiv .list {
float:left;
width:100%;
}
.dropDiv .word {
float:left;
}
.dropDiv .view {
float:right;
color: gray;
text-align: right;
font-size: 10pt;
}
</style>

调用方法:
代码如下:
<script type="text/javascript" src="../js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="../js/autopoint-1.0.1.js"></script>
<script type="text/javascript">
$(function(){
  $("input").autopoint({url:'http://localhost/xun/ajax.svl?method=getsearchhelp'});
});
</script>
<body>
  <input type="text" size="50" />
  <input type="text" size="50" />
</body>

servlet主要部分:
代码如下:
response.setContentType("text/html");
response.setHeader("Cache-Control", "no-cache");
response.setCharacterEncoding("UTF-8");
String word = request.getParameter("word");
if(Utils.isBlank(word)) return;
JSONObject json = new JSONObject();
JSONArray array = new JSONArray();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("word", word + "a1");
map1.put("view", 10);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("word", word + "a2");
map2.put("view", 15);
Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("word", word + "a3");
map3.put("view", 2);
array.add(JSONObject.fromObject(map1));
array.add(JSONObject.fromObject(map2));
array.add(JSONObject.fromObject(map3));
json.put("data", array);
PrintWriter out = response.getWriter();
out.print(json.toString());
out.close();

其中JSONObject和JSONArray类来自json-lib.jar,为了测试方便,是直接返回数据的,实际应用中可以替换为
从数据源查取数据.
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    jquery 模拟类搜索框自动完成搜索提示功能(改进)

    在本示例中,我们探讨的是如何使用jQuery实现一个类似于Google搜索框的自动完成功能,即用户在输入框中输入文字时,系统会根据输入自动显示相关建议。这个功能通过`autopoint.js`脚本实现,它依赖于jQuery库。 首先...

    jQuery分类下拉搜索框代码.zip

    - 在页面加载完成后,通过jQuery的`$(document).ready()`函数初始化搜索框和下拉列表。首先,绑定事件监听器到输入框,当用户输入时触发相应的处理函数。 - 处理函数中,获取用户输入的关键词,然后遍历下拉列表中...

    jQuery文本框input输入关键字自动补全筛选代码

    本示例中的"jQuery文本框input输入关键字自动补全筛选代码"是利用jQuery实现的一种常见用户体验增强功能,通常用于网站的搜索框,当用户在文本框中输入关键词时,系统会实时显示与输入关键词匹配的相关建议,提升...

    jquery的搜索框输入提示

    "jquery的搜索框输入提示"是一个基于jQuery实现的功能,它旨在提高用户体验,特别是在用户进行搜索时提供实时的建议或匹配结果。这个功能通常用于搜索引擎或者网站的搜索框,如百度和谷歌,当用户输入关键词时,会...

    jQuery搜索框实例绑定提交事件.zip

    本实例"jQuery搜索框实例绑定提交事件.zip"着重展示了如何利用jQuery来创建一个功能完善的搜索框,其中包括下拉选择搜索引擎分类,并在用户按下键盘回车键时自动触发提交搜索请求的功能。 首先,`index.html`是网页...

    jquery搜索垂直模拟select下拉效果.zip

    这个项目就是针对这些需求,通过jQuery来模拟一个具有搜索功能的垂直下拉菜单,用户可以在输入框中输入关键词,系统会实时筛选并展示匹配的选项,提升了用户在大量数据中的查找效率。 要实现这样的效果,主要涉及...

    6种非常精美的Web前端搜索框展示(附源码)(三)

    在本文中,我们将深入探讨6种精美的Web前端搜索框设计,这些设计不仅注重美观,还兼顾用户体验。作为Web开发的重要组成部分,一个优秀的搜索框能够提升网站的易用性,帮助用户快速找到所需信息。我们将重点分析每种...

    jQuery模拟select下拉框三级城市联动代码.zip

    总之,“jQuery模拟select下拉框三级城市联动代码”是一个实用的前端开发工具,它结合了jQuery的强大功能和拼音搜索的便利性,为用户提供了高效的城市选择体验。在理解并实现这个功能后,开发者可以将其作为一个基础...

    强大的jquery模拟选择框插件Chosen实现了选项分组.zip

    - **搜索功能**:内置搜索框允许用户快速查找和选择特定选项,提高交互效率。 - **选项分组**:支持将选项组织成可折叠的类别,使用户能更清晰地看到不同类别的选项。 - **多选支持**:可以选择多个选项,同时...

    超实用的jQuery代码段

    第5章 jQuery实现用户输入自动完成功能 5.1 最简单的用户输入自动完成 5.2 使用远程数据源的自动完成 5.3 带缓存的自动完成 5.4 带滚动条的自动完成 5.5 Combobox风格的自动完成 5.6 读取XML数据的自动完成 5.7 多维...

    JQuery&CSS;&CSS;+DIV实例大全.rar

    1.JS+CSS仿腾讯QQ首页搜索框无刷新换肤效果代码 2.js+css简单后台二级树形菜单demo示例 3.JS+CSS美化经典Select选项框插件 4.JS+CSS通用一个页面同时三个焦点图轮换效果完整实例 5.JS+CSS网页版模拟QQ登录...

    jQuery带搜索过滤功能的手风琴导航菜单特效

    **jQuery带搜索过滤功能的手风琴导航菜单特效详解** 在网页设计中,用户界面的易用性和用户体验至关重要。其中,导航菜单是用户与网站交互的关键元素之一。本篇将详细介绍如何利用jQuery实现一个具有搜索过滤功能的...

    jquery 实现的下拉框模拟

    通过以上步骤,我们可以创建一个功能强大的 jQuery 模拟下拉框。这个方法的灵活性在于可以轻松地根据项目需求进行定制,无论是样式调整还是功能扩展,都能有效地提升用户体验。同时,由于 jQuery 的普及性,许多...

    模拟google自动补全功能

    标题中的“模拟google自动补全功能”指的是在Web应用程序中实现类似于Google搜索框的自动补全功能。这种功能能够提高用户输入效率,提供便捷的搜索体验。它基于Ajax(Asynchronous JavaScript and XML)技术,利用...

    15个jquery常用案例源码

    1. **百度搜索下拉代码**:这个案例模拟了百度搜索框的下拉提示功能,通过监听用户输入并动态生成相关建议,提高了用户体验。核心是利用`keyup`事件捕获用户输入,并通过AJAX请求获取匹配数据,然后使用`append()`...

    jQuery Select下拉框分类菜单多选插件.zip

    二次开发时,可以针对特定需求调整插件的样式、行为和功能,例如增加搜索框、优化动画效果、添加自定义事件等。 总结,"jQuery Select下拉框分类菜单多选插件"通过jQuery的强大功能,实现了对原生Select元素的增强...

    jQuery模拟select实现下拉菜单功能

    在本文中,我们将深入探讨如何使用jQuery来模拟一个下拉菜单功能,这通常用于实现类似于一淘搜索框的交互体验。这个模拟下拉菜单的方法利用了CSS3来创建箭头的动画效果,使得用户界面更加生动和友好。 首先,我们来...

    可搜索的jQuery树形菜单代码

    在搜索功能中,代码会监听搜索框的输入事件,当用户输入关键词时,遍历树形菜单的所有节点,对每个节点的内容进行匹配,如果匹配成功,就将该节点高亮显示(通常通过修改CSS类实现)。这种实时搜索功能提升了用户...

Global site tag (gtag.js) - Google Analytics