`
pouyang
  • 浏览: 321657 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JS jquery自动补全

阅读更多
思路:
1 输入字符串,keyup事件,通过输入的字符串去后台取数据
2 Controoler层跳到jsp页面,返回null,拼装自己想要的任何数据,xml,html都可以
3 异步成功方法获取数据,用jquery的方法进行设置
4 形成div在input下进行显示
5 第二次的keyup事件,如果第一次的没有请求完,取消第一次,进行第二次的keyup事件

1 页面
<html:text property="testDTO.tmpText01" styleId="tmpText01" styleClass="must" />
        <div id="autodpt" style="position:absolute; top:25px; left:50px; padding:4px; display:none; z-index:100;OVERFLOW-Y:auto;SCROLLBAR-FACE-COLOR:#ffffff;FONT-SIZE:11pt;PADDING-BOTTOM:0px;SCROLLBAR-HIGHLIGHT-COLOR:#ffffff;OVERFLOW:auto;LETTER-SPACING:1pt;HEIGHT:200px;TEXT-ALIGN:left"></div>


2 js文件
var wordInput = $("#tmpText01");
    var wordInputOffset = wordInput.offset();
//隐藏自动补全框并通过CSS设置补全框的位置大小及样式
     $("#autodpt").hide()
    .css("position","absolute")
    .css("border","1px black solid")
    .css("top",wordInputOffset.top + wordInput.height() + 5 + "px")
    .css("left",wordInputOffset.left + "px")
    .width(wordInput.width() + 2);
     var IfrRef1 = document.getElementById('DivDpt');
     IfrRef1.style.display = "none";
/添加键盘按下并弹起的事件
    wordInput.keyup(function(event){
        //处理文本框中的键盘事件
        var myEvent = event||window.event;
        var keyCode = myEvent.keyCode;
        //如果输入的是字母,退格,delete,空格或者数字键,应该将文本框中的最新信息发送给服务器,其中,空格键和数字键的加入使得输入中文也能支持~~
        if((keyCode >= 65 && keyCode<=90) || (keyCode >= 48 && keyCode <= 57) ||(keyCode>=96 && keyCode<=105) || keyCode == 46 || keyCode == 8 || keyCode == 32){
            
            //获取文本框的内容
            var wordText = $("#tmpText01").val();
            var autoNode = $("#autodpt");
            if(wordText!=""){ //
            //将文本框中的内容发送到服务器端
            //对上次未完成的延时操作进行取消
            clearTimeout(timeoutIdDpt);
//对于服务器端进行交互延迟500ms,避免快速打字造成的频繁请求
            timeoutIdDpt = setTimeout(function(){
                $.post("*.do?method=initInfoList",{word:wordText},function(data){
//将dom对象data转换成JQuery的对象
                var jqueryObj = $(data);
               //先找到所有的word节点
                var wordNodes = jqueryObj.find("word");
                //遍历所有的word节点,取出单词内容将单词内容添加到弹出框中
                autoNode.html('');
wordNodes.each(function(i){
                   //获取单词内容
                    var wordNode = $(this);
                   //新建div节点将单词内容加入到新建的节点中,将新建的节点加入到弹出框的节点中
                    var newDivNode = $("<div>").attr("id",i)
                                               .attr("attr1",wordNode.attr("attr1"))
                                               .attr("attr2",wordNode.attr("attr2"))
                   // autoNode.attr("dd",i+"a");
                    newDivNode.html(wordNode.text()).appendTo(autoNode);
//增加鼠标进入事件,高亮节点;
                    newDivNode.mouseover(function(){
                        if(highlightindexDpt != -1){
                            $("#autodpt").children("div").eq(highlightindexDpt).css("background-color","white");
                        }
                        highlightindexDpt = $(this).attr("id");
                       
                        $(this).css("background-color","yellow");
                    });
                    //增加鼠标移出事件,取消当前高亮节点
                    newDivNode.mouseout(function(){
                        $(this).css("background-color","white");
                    });
                   //增加鼠标点击事件,可以进行补全
                    newDivNode.click(function(){
                        var comText = $(this).text();
                        $("#autodpt").hide();
                        var IfrRef1 = document.getElementById('DivDpt');
                        IfrRef1.style.display = "none";
                        highlightindexDpt=-1;
                        $("#tmpText01").val(comText);
                        $("#node").attr("value",$(this).attr("attr1"));
                     
                                              
                                          });
                });

 //如果服务器端有数据返回,则显示弹出框
if(wordNodes.length>0){
                    autoNode.show();
                    var DivRef = document.getElementById('autodpt');
                    var IfrRef = document.getElementById('DivDpt');
                    IfrRef.style.width = DivRef.offsetWidth;
                    IfrRef.style.height = DivRef.offsetHeight;
                    IfrRef.style.top = DivRef.style.top;
                    IfrRef.style.left = DivRef.style.left;
                    IfrRef.style.zIndex = DivRef.style.zIndex - 1;
                    IfrRef.style.display = "block";
                }else {
                autoNode.hide();
                var IfrRef1 = document.getElementById('DivDpt');
                IfrRef1.style.display = "none";
                highlightindexDpt=-1;
                }
            },"xml");
            },1500);
 }else{
            	  var IfrRef1 = document.getElementById('DivDpt');
                  IfrRef1.style.display = "none";
                  highlightindexDpt=-1;
                autoNode.hide();
                highlightindexDpt=-1;
                }
 } else if(keyCode == 38 || keyCode==40){
            //如果输入的是向上38向下40按键
            if(keyCode == 38){
                //up
                var autoNodes = $("#autodpt").children("div");
                if(highlightindexDpt !=-1)
                {
                    autoNodes.eq(highlightindexDpt).css("background-color","white");
                    highlightindexDpt--;
                }else{
                	highlightindexDpt = autoNodes.length -1;
                }
                if(highlightindexDpt == -1){
                    //如果修改索引值以后index变成-1,则将索引中指向最后一个元素
                	highlightindexDpt = autoNodes.length -1;
                }
               //让现在被高亮的内容变成黄色
                autoNodes.eq(highlightindexDpt).css("background-color","yellow");
            }
            if(keyCode == 40){
                //down
                var autoNodes = $("#autodpt").children("div");
                if(highlightindexDpt !=-1)
                {
                    autoNodes.eq(highlightindexDpt).css("background-color","white");
                }
                highlightindexDpt++;
                if(highlightindexDpt == -1){
                   //如果修改索引值以后index变成-1,则将索引中指向最后一个元素
                	highlightindexDpt = 0;
                }
               //让现在被高亮的内容变成黄色
                autoNodes.eq(highlightindexDpt).css("background-color","yellow");
            }
        }else if(keyCode == 13){
           //如果按下的是回车
            
            //下拉框有高亮的内容
            if(highlightindexDpt !=-1)
            {
                var comText = $("#autodpt").hide().children("div").eq(highlightindexDpt).text();
                var IfrRef1 = document.getElementById('DivDpt');
                IfrRef1.style.display = "none";
                highlightindexDpt=-1;
                $("#DivDpt").val(comText); //将文本框内容改成选中项

             //   $("form:first").submit(); //提交form。若没有这句话,按下回车后,仅仅只改变了文本框里的内容,但是由于form本身就监控了回车按键默认为submit,提交的是文本框改变之前的内容,解决这个问题最简单的方式就是在文本框内容改变以后强制提交form的内容,此时,提交的内容就是选中项。

            }
           //下拉框没有高亮的内容
            else{
                $("#autodpt").hide();
                var IfrRef1 = document.getElementById('DivDpt');
                IfrRef1.style.display = "none";
               //让文本框失去焦点
                $("#tmpText01").get(0).blur();
            }
        }
        
    });

3 java代码
public ActionForward initAjaxForXML(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		try {
			   log.info("Ajax返回XML 异步请求开始!");
			   			   request.setAttribute("attr",new ArrayList());
			   //根据c_code 判断页面的显示情况
			   response.setCharacterEncoding("UTF-8"); 
			   response.setHeader("Cache-Control", "no-cache,must-revalidate"); 
			   response.setHeader("Pragma", "no-cache"); // HTTP 1.0 
			   response.setDateHeader("Expires", 0); // prevents cachin
			   request.getRequestDispatcher("/ajaxResponseHTMLBetween.jsp").forward(request, response);
			   log.info("Ajax返回XML 异步请求结束!");
			   return null;
		}  catch (Exception e) {
			log.error("Ajax返回XML 异常!");
			return null;
		}


4 中间页面 ajaxResponseHTMLBetween.jsp
<%@ page language="java" contentType="text/xml; charset=utf-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<words>
    <c:forEach var="word" items="${attr}">
        <word   attr1="${word.attr1}" attr2="${word.attr2}"  attr3="${word.atrr3}" >${word.attr1}  ${word.attr2}</word>
    </c:forEach>
</words>
分享到:
评论
1 楼 niuqiang2008 2011-01-13  
   

相关推荐

    notepad++ css html js jquery 自动补全提示插件

    标题中的“notepad++ css html js jquery 自动补全提示插件”指的是Notepad++文本编辑器中的一个增强工具,这个插件专为提升CSS、HTML、JavaScript和jQuery的编码效率而设计。Notepad++是一款免费且开源的代码编辑器...

    jquery自动补全示例。包括后台,中文乱码解决JS

    **jQuery自动补全插件详解** jQuery 自动补全插件是一种常见的前端开发工具,它为用户在输入框中提供动态建议,提高了用户体验,尤其在处理大量数据输入时显得尤为重要。本示例将涵盖如何使用jQuery实现自动补全...

    jquery 自动补全搜索框控件

    jQuery自动补全功能主要依赖于jQuery UI库中的Autocomplete组件。它监听用户在搜索框中的输入事件,当用户输入达到一定字符数量(通常是1个或以上)时,触发异步请求,向服务器发送查询请求。服务器返回匹配结果,...

    jQuery自动补全筛选input代码.zip

    本项目"jQuery自动补全筛选input代码"是利用jQuery实现的一个功能,它允许用户在input输入框中输入关键词时,自动筛选并显示匹配的信息。这种功能在网页搜索、表单填充等场景下非常实用,提高了用户体验。 首先,...

    jquery自动补全插件

    **jQuery自动补全插件详解** 在Web开发中,用户输入常常是交互体验的重要环节,为了提高用户体验,很多网站和应用引入了自动补全(Autocomplete)功能。jQuery作为一个广泛使用的JavaScript库,提供了丰富的插件...

    Asp.net+JQuery自动补全

    Asp.net与jQuery结合实现的自动补全功能(autocomplete)是一种常见的前端交互设计,它能够极大地提高用户在输入框中的输入效率。此功能通常应用于搜索框、表单填充等场景,为用户提供动态提示,根据他们输入的部分...

    Jquery自动补全

    jQuery自动补全是一种常见的前端开发技术,用于提升用户体验,特别是在搜索框或输入字段中,它能够根据用户输入的内容实时提供预测建议。这个功能在许多网站和应用中都有所应用,如百度搜索、谷歌搜索等。它能够帮助...

    高级jQuery自动补全插件

    **jQuery自动补全插件详解** 在Web开发中,用户界面的交互性和便捷性是提升用户体验的关键因素之一。其中,自动补全功能是一项常见的需求,它可以在用户输入时提供预测建议,大大加快输入速度,降低错误率。jQuery...

    jquery自动补全.rar

    《jQuery自动补全功能详解》 在Web开发中,用户输入常常是交互的重要部分,而自动补全(Autocomplete)功能则能极大地提高用户体验,减少用户输入错误,提升操作效率。jQuery库以其轻量级、易用性以及丰富的插件...

    改进版 jquery 仿百度谷歌自动补全输入(支持中文)

    总的来说,这个项目结合了jQuery、JavaScript和可能的Java技术,创建了一个适应中文输入的自动补全功能。开发者不仅需要理解前端的交互逻辑,还需要熟悉后端的数据处理,以及如何处理中文字符的特殊性,这展示了在...

    jquery自动补全例子

    《jQuery自动补全功能详解与应用实践》 在Web开发中,用户输入的交互体验往往对网站或应用程序的用户体验有着重大影响。为了提高用户输入效率和便捷性,开发者常常会引入自动补全(AutoComplete)功能。jQuery库以...

    jQuery 自动补全

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

    jQuery实现自动补全功能

    总的来说,jQuery实现自动补全功能是一个实用且常见的话题,它涉及到DOM操作、事件监听、Ajax请求以及数据处理等多个JavaScript和jQuery的核心概念。通过学习和实践,开发者能够提升用户界面的交互性和可用性,增强...

    jquery自动补全代码

    本篇文章将深入探讨“jQuery自动补全代码”这一插件,包括其原理、使用方法、API接口以及如何结合CSS和JavaScript实现功能。 首先,让我们了解什么是自动补全。自动补全是用户在输入框中输入字符时,系统根据已有的...

    jQuery百度搜索自动补全插件.zip

    jQuery百度搜索自动补全插件基于流行的JavaScript库jQuery和typeahead.js实现,为网页上的搜索框提供了高效且用户友好的自动补全功能。这个插件主要用于提升用户体验,尤其是在需要处理大量数据并希望用户能快速找到...

    jquery 自动补全例子

    5. **JavaScript交互**:"jquery.js"是jQuery的核心库,而"jquery.suggest.js"是自动补全插件的实现。这两个文件通过JavaScript事件监听和处理,实现了当用户在输入框中键入时,实时查询数据源并显示匹配项。 实现...

    php+jquery 自动补全

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

    jQuery自动补全效果

    jQuery自动补全的基本原理是监听用户的输入事件,当用户在输入框中输入字符时,通过JavaScript函数处理这些字符,并根据预设的数据源(可以是JSON、XML或者简单的数组)查找匹配的项。一旦找到匹配项,就会在输入框...

    jquery自动补全小栗子

    要创建一个jQuery自动补全功能,我们需要以下几个步骤: 1. **引入jQuery库**:确保在HTML文件中引入jQuery库,可以使用CDN链接或本地存储的jQuery文件。 ```html &lt;script src="https://code.jquery....

Global site tag (gtag.js) - Google Analytics