`
yiheng
  • 浏览: 156616 次
社区版块
存档分类

jQuery autocomplete 自扩展插件、自动补全示例

 
阅读更多

jquery-lib版本是 1.3.2的,该插件是简单的扩展插件,代码也比较简单的封装。所以看起来也比较简单不是很费力,当然封装得也不是很好。

不过做了浏览器方面的兼容,经测试兼容IE6+、Firefox3.5+

首先看看autocomplete.js:

<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->;(function ($) { var index = -1; var timeId; var cssOptions = { "border": "1px solid black", "background-color": "white", "position": "absolute"/*, "font": "normal normal lighter 14px 6px Times New Roman"*/ }; var defaults = { width: "auto", highlightColor: "#3399FE", unhighlightColor: "#FFFFFF", css: cssOptions, dataType: "xml", paramName: "word", delay: 500, max: 20 }; var keys = { UP: 38, DOWN: 40, DEL: 46, TAB: 9, ENTER: 13, ESC: 27, /*COMMA: 188,*/ PAGEUP: 33, PAGEDOWN: 34, BACKSPACE: 8, A: 65, Z: 90 }; $.fn.extend({ autocomplete: function (sUrl, settings) { sUrl = (typeof sUrl === "string") ? sUrl : ""; var param = !this.attr("id") ? defaults.paramName : this.attr("id"); settings = $.extend({}, defaults, {url: sUrl, paramName: param}, settings); var autoTip = this.autoTipTemplate(this, settings); $("body").append(autoTip); var $this = this; this.keyup(function (event) { $this.keyOperator(event, autoTip, settings); }); /*$("input[type=button]").click(function () { $("#result").text("文本框中的【" + search.val() + "】被提交了!"); $("#auto").hide(); index = - 1; });*/ return this.each(function () { $this.val(); }); }, autoTipTemplate: function (input, settings) { var inputOffset = input.offset(); var autoTip = $("<div/>").css(settings.css).hide() .css("top", inputOffset.top + input.height() + 5 + "px") .css("left", inputOffset.left + "px"); var space = $.browser.mozilla ? 2 : 6;//兼容浏览器 var tipWidth = (typeof settings.width === "string" && "auto") ? input.width() : settings.width; autoTip.width(tipWidth + space + "px"); return autoTip; }, select: function (target, index, settings, flag) { var color = flag ? settings.highlightColor : settings.unhighlightColor; target.children("div").eq(index).css("background-color", color); }, keyOperator: function (event, autoTip, settings) { var evt = event || window.event; var autoNodes = autoTip.children("div"); var kc = evt.keyCode; var $this = this; /* 当用户按下字母或是delete 或是退格键*/ if (kc >= keys.A && kc <= keys.Z || kc == keys.BACKSPACE || kc == keys.DEL) { var wordText = this.val(); if (wordText.length != 0) { var param = {}; param[settings.paramName] = wordText; clearTimeout(timeId); timeId = setTimeout(function () { $.post(settings.url, param, function (data) { var wordObj = $(data); if (settings.dataType == "xml") { var wordNodes = wordObj.find("word"); autoTip.html(""); wordNodes.each(function (i) { var divNode = $("<div>").attr("id", i); //将遍历的单词加入到创建的div中,然后把该div追加到auto中 divNode.html($(this).text()).appendTo(autoTip); //鼠标已进去,添加高亮 divNode.mousemove(function () { //如果已经存在高亮,去掉高亮改为白色 if (index != -1) { autoTip.children("div").eq(index).css("background-color", settings.unhighlightColor); } index = $(this).attr("id"); $(this).css("background-color", settings.highlightColor); }); //鼠标移出,取消高亮 divNode.mouseout(function () { $(this).css("background-color", settings.unhighlightColor); }); //点击高亮内容 divNode.click(function () { $this.val($(this).text()); index = -1; autoTip.hide(); }); }); if (wordNodes.length > 0) { autoTip.show(); } else { autoTip.hide(); index = -1; } } }); }, settings.delay); } else { autoTip.hide(); index = -1; } } else if (kc == keys.UP || kc == keys.DOWN) {/*当用户按下上下键*/ if (kc == keys.UP) {//向上 if (index != -1) { autoNodes.eq(index).css("background-color", settings.unhighlightColor); index--; } else { index = autoNodes.length - 1; } if (index == -1) { index = autoNodes.length - 1; } autoNodes.eq(index).css("background-color", settings.highlightColor); } else {//向下 if (index != -1) { autoNodes.eq(index).css("background-color", settings.unhighlightColor); } index++; if (index == autoNodes.length) { index = 0; } autoNodes.eq(index).css("background-color", settings.highlightColor); } } else if (kc == keys.PAGEUP || kc == keys.PAGEDOWN) { event.preventDefault(); if (kc == keys.PAGEUP) { if (index != -1) { autoNodes.eq(index).css("background-color", settings.unhighlightColor); } if (autoNodes.length > 0) { index = 0; autoNodes.eq(0).css("background-color", settings.highlightColor); } } else { if (index != -1) { autoNodes.eq(index).css("background-color", settings.unhighlightColor); } index = autoNodes.length - 1; autoNodes.eq(index).css("background-color", settings.highlightColor); } } else if (kc == keys.ENTER) { //回车键 //有高亮内容就补全信息 if (index != -1) { $this.val(autoNodes.eq(index).text()); } else {//没有就隐藏 $("body").append($("<div/>").text("文本框中的【" + $this.val() + "】被提交了!")); $this.get(0).blur(); } autoTip.hide(); index = -1; } else if (kc == keys.ESC) { autoTip.hide(); } } }); })(jQuery);

现在来分析上面的autocomplete插件的一些常用选项:
index就是选择提示选项高亮的索引;
timeId是当用户在文本域输入时,利用setTimeout进行ajax请求服务器获得数据的而返回的时间;
cssOptions是自动提示选项的样式,这里给出了一些默认的样式;
var defaults = {
width: "auto",//默认或自动设置宽度
highlightColor: "#3399FE",//高亮时的颜色
unhighlightColor: "#FFFFFF",//非高亮时的颜色
css: cssOptions,
dataType: "xml",//ajax请求返回数据类型
paramName: "word",//ajax请求的参数名称,如果你有设置文本域的id,那么就使用这个属性
delay: 500,//当文本域在不停的输入时,ajax多久请求一次服务器
};
keys就是键盘键对应的值;
autocomplete就是调用的函数,可以在里面设置ajax请求的url,以及配置上面defaults中出现的参数,这个方法返回的是文本域的值;
autoTipTemplate就是输入时显示的提示框、提示菜单,返回的是一个jquery对象;
select是选择提示菜单也就是下来提示菜单的高亮选项,target当然是目标对象了,index是即将被高亮的选项的索引,settings就是
高亮的颜色配置,这个在默认defaults中就有的。是通过$.extend方法将defaults对象的属性赋值给settings对象的;
keyOperator是针对文本域的键盘操作,这个是核心函数;操作提示、自动补全就靠它了;

下面看看html代码,看看是如何调用autocomplete插件的:

<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Ajax示例,实现Google搜索补全功能</title> <meta http-equiv="author" content="hoojo"> <meta http-equiv="email" content="hoojo_@126.com"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="jslib/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="jslib/jquery.autocomplete-1.2.js"></script> <script type="text/javascript"> $(function () { $(":text").autocomplete("AutocompleteWordServlet", {dataType: "xml", width: "auto"}); }); </script> </head> <body> 请输入:<input type="text" /> <input type="button" value="Go" /><br/><br/> </body> </html>

看看这段代码AutocompleteWordServlet是请求的Servlet,dataType是ajax请求服务器端的返回数据的类型,width可以设置自动提示菜单的宽度。

怎么样,用法比较简单吧。当然后面你还可以加其他的配置,如:

代码片段
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->$(":text").autocomplete("AutocompleteWordServlet", { width: "auto", highlightColor: "#3355FE", unhighlightColor: "#FFFFcc", css: {border: "2px solid red"}, dataType: "xml", paramName: "keyWord", delay: 300 });


这样也是可以的;

看看AutocompleteWordServlet的代码:

<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->package com.hoo.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @SuppressWarnings("serial") public class AutocompleteWordServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String word = request.getParameter("word"); request.setAttribute("word", word); //System.out.println(word); request.getRequestDispatcher("word.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

没什么可说的,就是获取客户端文本域的ajax请求的关键字,然后在jsp页面中进行单词过滤。不过你也可以在客户端用正则

或是在服务器端用正则过滤都是可以的。

下面看看word.jsp的内容:

<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><%@ page language="java" contentType="text/xml; charset=UTF-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <words> <c:if test="${fn:startsWith('abstruct', word)}"> <word>abstruct</word> </c:if> <c:if test="${fn:startsWith('anilazine', word)}"> <word>anilazine</word> </c:if> <c:if test="${fn:startsWith('appeared', word)}"> <word>appeared</word> </c:if> <c:if test="${fn:startsWith('autocytolysis', word)}"> <word>autocytolysis</word> </c:if> <c:if test="${fn:startsWith('apple', word)}"> <word>apple</word> </c:if> <c:if test="${fn:startsWith('boolean', word)}"> <word>boolean</word> </c:if> <c:if test="${fn:startsWith('break', word)}"> <word>break</word> </c:if> <c:if test="${fn:startsWith('bird', word)}"> <word>bird</word> </c:if> <c:if test="${fn:startsWith('blur', word)}"> <word>blur</word> </c:if> <c:if test="${fn:startsWith('call', word)}"> <word>call</word> </c:if> <c:if test="${fn:startsWith('class', word)}"> <word>class</word> </c:if> <c:if test="${fn:startsWith('card', word)}"> <word>card</word> </c:if> <c:if test="${fn:startsWith('dacnomania', word)}"> <word>dacnomania</word> </c:if> <c:if test="${fn:startsWith('document', word)}"> <word>document</word> </c:if> </words>

就是一个xml格式的文档,通过使用jstl表达式,用startsWith函数匹配,如果通过就显得在xml内容中,还有看到上面的contentType="text/xml; charset=UTF-8"了没有,是text/xml哦!这点要注意,如果不设置有的浏览器就不能解析了。

分享到:
评论

相关推荐

    jquery的autocomplete(自动补全)插件

    **jQuery的Autocomplete插件**是用于实现网页输入框自动补全功能的一种高效解决方案,它极大地提升了用户体验,尤其是在用户需要从大量数据中选择时。这个插件是基于jQuery库的,因此,首先需要确保在项目中引入了...

    jquery.autocomplete.js 自动补全插件实例

    `jQuery.autocomplete.js` 是一个流行的JavaScript库jQuery的扩展插件,主要用于实现输入框的自动补全功能。这个插件极大地增强了用户在网页上的交互体验,尤其在处理大量可选项时,用户可以通过输入部分文字快速...

    jquery自动补全插件(jquery autocomplete)

    jQuery AutoComplete 是一个非常流行的前端插件,它为输入框提供了自动补全的功能,极大地提升了用户在网页上的输入体验。这个插件基于 jQuery 库,因此,使用前需要先引入 jQuery。AutoComplete 的主要功能是根据...

    jQuery文本框联想补全自动完成插件

    jQuery文本框联想补全自动完成插件是一款非常实用的前端开发工具,它可以帮助开发者在网页的输入框中实现智能联想和自动补全功能。这个插件基于JavaScript库jQuery构建,因此,使用它之前需要确保项目中已经引入了...

    jQuery仿百度搜索下拉框自动补全代码插件

    **jQuery仿百度搜索下拉框自动补全代码插件** 在网页开发中,为了提供用户友好的搜索体验,经常会使用到自动补全功能,就像百度搜索引擎那样。这种功能可以极大地提高用户输入效率,减少用户的输入错误,提升用户...

    jquery autocomplete 自动完成 插件

    jQuery Autocomplete插件是jQuery UI库中的一个组件,它提供了搜索框自动补全的功能,极大地提高了用户输入数据的效率和用户体验。这个插件基于jQuery框架,使得在网页中实现智能搜索和建议输入变得简单易行。 ### ...

    jquery autocomplete自动补全功能实现

    其中一个非常实用的功能就是jQuery的Autocomplete,这个功能为用户提供了自动补全输入的能力,大大提升了用户体验。本文将深入探讨如何利用jQuery实现自动补全功能,特别是针对邮箱、城市和中文的自动补全场景。 ...

    高级jQuery自动补全插件

    除了基本功能外,高级jQuery自动补全插件还支持多种扩展特性: 1. **异步数据源**:允许从远程API获取数据,如通过AJAX请求填充建议列表。 2. **自定义模板**:允许自定义提示项的HTML结构,以实现更丰富的展示效果...

    jQuery 插件demo 自动补全

    "jQuery 插件demo 自动补全"是指一个使用jQuery编写的插件示例,它实现了自动补全的功能,通常在输入框中输入文字时,会根据已输入内容动态显示匹配的建议列表。这种功能常见于搜索框、地址栏等场景,提高了用户输入...

    【JS相关插件】自动完成提示插件(jquery.autocomplete)

    "【JS相关插件】自动完成提示插件(jquery.autocomplete)" 这个标题指出了我们讨论的核心是JavaScript的一个插件,它主要用于实现自动完成或建议输入的功能。"jquery.autocomplete"是这个插件的名字,表明它是基于...

    jquery.autocomplete.js使用示例,可直接运行

    jQuery Autocomplete.js 插件是提高网页表单输入效率的好帮手,通过与Ajax的结合,能够轻松实现动态数据的自动补全功能。在实际开发中,可以根据具体需求灵活配置和扩展,以满足各种复杂场景。记得在使用过程中注意...

    jquery autocomplete下载.rar

    jQuery Autocomplete 是一个非常实用的插件,它为网页表单输入框提供了自动补全功能,极大地提升了用户体验。这个压缩包“jquery autocomplete下载.rar”包含了实现这一功能所需的基本文件,包括样式表、HTML 模板、...

    jquery自动补全代码

    `jquery.autocomplete.js`则包含了插件的主要逻辑,实现了自动补全的核心功能。 在使用这个插件时,首先需要在页面中引入jQuery库和`jquery.autocomplete.js`文件。然后,通过jQuery选择器找到需要应用自动补全的...

    Jquery自动补全

    - jQuery有多种自动补全插件可供选择,如`jQuery UI Autocomplete`和`EasyAutocomplete`等。 - `jQuery UI Autocomplete`是官方提供的一个插件,它提供了丰富的定制选项和样式。 - `EasyAutocomplete`则更加轻量...

    jQuery 自动补全

    jQuery 自动补全插件(jQuery UI Autocomplete)是实现这一功能的强大工具,它基于流行的 jQuery JavaScript 库,提供了简单而灵活的接口来创建高效的自动补全效果。 ### 一、jQuery UI Autocomplete 基本概念 ...

    jQuery AutoComplete使用实例

    总之,jQuery AutoComplete 是一个强大且灵活的自动补全解决方案,它能轻松地与现有的 jQuery 项目集成,提供丰富的配置选项和扩展能力,满足各种场景下的需求。通过深入了解和实践,你可以将其运用到实际项目中,...

    php+jquery 自动补全

    虽然jQuery本身并不直接提供代码补全功能,但很多编辑器和IDE都有针对jQuery的插件或扩展,提供jQuery函数和选择器的自动补全。例如,VSCode中的jQuery IntelliSense插件就是一个很好的例子。 将PHP和jQuery结合...

    基于JQuery和DWR的自动补全

    1. **JQuery的自动补全插件**:JQuery提供了多种实现自动补全的插件,如`jquery-ui-autocomplete`。这些插件通常通过监听用户输入,然后发送Ajax请求到服务器获取匹配的建议数据。用户可以通过配置插件参数来定制...

    jquery autocomplete官方版(源代码+示例)

    2. **示例**:可能包括HTML、CSS和JavaScript文件,展示了不同场景下如何使用 Autocomplete,以及如何配置和扩展插件。 3. **文档**:可能包含 `.md` 或 `.html` 文件,解释了插件的用法、API 和配置选项。 4. **...

    jquery自动补全代码 AutoComplete-master

    这个"jquery自动补全代码 AutoComplete-master"项目,正是基于jQuery UI的AutoComplete功能的实现示例。 ### 1. jQuery AutoComplete的基本概念 jQuery AutoComplete是jQuery UI框架的一部分,提供了一个可定制的...

Global site tag (gtag.js) - Google Analytics