`

js搜索提示仿百度搜索

    博客分类:
  • js
 
阅读更多
仿百度搜索,用的基本的js事件和ajax请求,服务器后端返回xml类型,代码比较齐全,基本上可以直接使用。

<style>
#auto_div{ 
    position:absolute; 
    border-width:1px; 
    border:1px #808080 solid; 
} 
</style>


<input type="text" name="userName" id="auto_txt" value=""/>
<div style="border-width:1px; background-color: white;" id="auto_div"></div>


//高亮的索引 
	var highLightIndex = -1; 
	//超时的标识(对用户连续快速按下键盘的事件做延时处理,只对用户在500ms内最后一次请求,让其生效) 
	var timeoutId; 
$(document).ready(function(){ 
	   init(); 
	   $('#auto_txt').bind('keyup',processKeyup); 
	}); 
	
	/*** 
	 * 初始化弹出框列表的位置,大小 
	 */ 
	function init(){ 
	   $('#auto_div').hide(); 
	   var pos = $('#auto_txt').position(); 
	   var topPosition = pos.top+$('#auto_txt').height()+7; 
	   var leftPosition = pos.left; 
	   $('#auto_div').offset({top:topPosition,left:leftPosition}); 
	   $('#auto_div').width(131); 
	} 
/** 
     * 处理点击鼠标后使div消失
     * @param event 
     */ 
	document.onclick = function(event){     
        var e = event || window.event;  
        var elem = e.srcElement||e.target;  
        while(elem){   
            if(elem.id == "auto_div"){  
                    return;  
            }  
            elem = elem.parentNode;       
        }  
        //隐藏div的方法  
        $('#auto_div').hide(); 
    }  
	
	/** 
     * 处理键盘按下后弹起的事件 
     * @param event 
     */ 
    function processKeyup(event){ 
	    var myEvent = event || windows.event; 
	    var keyCode = myEvent.keyCode; 
	    //输入是字母,或者退格键则需要重新请求 
	    if((keyCode >= 65 && keyCode <= 90) 
	    		|| keyCode == 32 
	    		|| (keyCode >= 48 && keyCode <= 57)){ 
	         //以下两行代码是为了防止用户快速输入导致频繁请求服务器 
	         //这样便可以在用户300ms内快速输入的情况下,只请求服务器一次 
	         //大大提高服务器性能 
	         highLightIndex = -1; 
	         clearTimeout(timeoutId); 
	         timeoutId = setTimeout(processAjaxRequest,300); 
	    //处理上下键(up,down) 
	    }else if(keyCode == 38 || keyCode == 40){ 
	        processKeyUpAndDown(keyCode); 
	    //按下了回车键 
	    }else if(keyCode == 13){ 
	        processEnter(); 
	    } 
     }
	
/** 
     * 处理Ajax请求 
     * @param data 
     */ 
    function processAjaxRequest(){
        $.ajax({ 
            type:"post",       //http请求方法,默认:"post" 
            url:"${contextPath}/common/ajaxCheckName/"+$('#auto_txt').val(),   //发送请求的地址 
            dataType:"xml",   //预期服务器返回的数据类型 
            success:processAjaxResponse 
         }); 
    }

    /** 
     * 处理Ajax回复 
     * @param data Ajax请求得到的返回结果为dom文档对象 
     */ 
    function processAjaxResponse(data){
        $('#auto_div').html('').show(); 
        $('#auto_div').css('z-index','999'); 
        $('#auto_div').css('position','absoulte'); 
        var xml = $(data);
        var words = xml.find('word'); 
        if(words.length == 0){
        	$('#auto_div').html('无搜索数据');
        }
        for(var i = 0 ; i < words.length ; i ++){ 
           var word_div = $('<div></div>'); 
           word_div.html(words.eq(i).text()); 
           word_div.hover(fnOver,fnOut); 
           word_div.click(getAutoText); 
           $('#auto_div').append(word_div); 
        } 
    }
    
    /** 
     * 处理鼠标滑过 
     */ 
    function fnOver(){ 
         changeToWhite(); 
         $(this).css('background-color','cyan'); 
         highLightIndex = $(this).index(); 
         //下面一行注释掉了,百度搜索也没这功能,就是鼠标移动时,跟着改变搜索框的内容 
         //$('#auto_txt').val($('#auto_div').children().eq(highLightIndex).html()); 
    } 
    
    /** 
     * 处理鼠标移除 
     */ 
    function fnOut(){ 
        $(this).css('background-color','white'); 
    } 

    /** 
     * 得到自动填充文本 
     */ 
    function getAutoText(){ 
       //有高亮显示的则选中当前选中当前高亮的文本 
       if(highLightIndex != -1){ 
           $('#auto_txt').val($(this).html().trim()); 
           $('#auto_div').html('').hide(); 
       } 
    } 
    
    /** 
     * 处理按下Enter键 
     * @param keyCode 
     */ 
    function processEnter(){ 
        if(highLightIndex != -1){ 
           $('auto_txt').val($('#auto_div').children().eq(highLightIndex).html().trim()); 
           $('#auto_div').html('').hide(); 
        } 
    } 

    /** 
     * 处理按上下键的情况 
     */ 
    function processKeyUpAndDown(keyCode){ 
        var words = $('#auto_div').children(); 
        var num = words.length; 
        if(num <= 0) return; 
        changeToWhite(); 
        highLightIndex = ((keyCode != 38 ? num + 1:num - 1)+highLightIndex) % num; 
        words.eq(highLightIndex).css('background-color','cyan'); 
        $('#auto_txt').val(words.eq(highLightIndex).html().trim()); 
    } 

    /** 
     * 如果有高亮的则把高亮变白 
     */ 
    function changeToWhite(){ 
        if(highLightIndex != -1){ 
            $('#auto_div').children().eq(highLightIndex).css('background-color','white'); 
        } 
    }


后台处理ajax请求的代码,包括List转换为XML
public void ajaxCheckName(@PathVariable String userName, HttpServletResponse response) throws IOException, Exception {
		List<UserInfo> userInfoList = hrUserInfoService.getUserListByName(userName);
		List<String> nameList = new ArrayList<String>();
		for(UserInfo userInfo : userInfoList){
			nameList.add(userInfo.getUserName());
		}
		response.setContentType("text/xml");
        response.setHeader("Cache-Control", "no-cache");
        response.getWriter().write(new StringUtil().list2Xml(nameList));
	}

/**
	 * 
	 * @method list2Xml
	 * @description List转换为XML
	 * 
	 * list to xml xml <words><word><key label="key1">value1</key><key 
     * label="key2">value2</key>......</word><word><key 
     * label="key1">value1</key><key 
     * label="key2">value2</key>......</word></words> 
     * 
	 * @param list
	 * @return
	 * @throws Exception 
	 * @author chengpp
	 * @date 2014-11-20 下午4:57:35 
	 *
	 */
	public String list2Xml(List<String> list) throws Exception {  
        Document document = DocumentHelper.createDocument();  
        Element wordsElement = document.addElement("words");  
        int i = 0;  
        for (Object o : list) {  
            Element wordElement = wordsElement.addElement("word");  
            if (o instanceof Map) {  
                for (Object obj : ((Map<?, ?>) o).keySet()) {  
                    Element keyElement = wordElement.addElement("key");  
                    keyElement.addAttribute("label", String.valueOf(obj));  
                    keyElement.setText(String.valueOf(((Map<?, ?>) o).get(obj)));  
                }  
            } else {  
                Element keyElement = wordElement.addElement("key");  
                keyElement.addAttribute("label", String.valueOf(i));  
                keyElement.setText(String.valueOf(o));  
            }  
            i++;  
        }  
        return doc2String(document);  
    }  
    
    /** 
     *  
     * @param document 
     * @return 
     */  
    public String doc2String(Document document) {  
        String s = "";  
        try {  
            // 使用输出流来进行转化  
            ByteArrayOutputStream out = new ByteArrayOutputStream();  
            // 使用UTF-8编码  
            OutputFormat format = new OutputFormat("   ", true, "UTF-8");  
            XMLWriter writer = new XMLWriter(out, format);  
            writer.write(document);  
            s = out.toString("UTF-8");  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
        return s;  
    }  
分享到:
评论

相关推荐

    漂亮的仿百度百度搜索提示

    在IT行业中,创建一个"漂亮的仿百度百度搜索提示"是一个常见的需求,这涉及到前端开发、用户体验设计以及数据处理等多个方面。下面将详细讲解这个主题所涵盖的知识点。 首先,前端开发是实现这一功能的核心环节。这...

    js--搜索框提示仿百度

    【标题】"js--搜索框提示仿百度"指的是利用JavaScript技术来实现一个类似百度搜索框的自动提示功能。在网页的搜索输入框中,当用户输入关键字时,系统会根据输入的内容动态显示与之相关的建议搜索词,提高用户体验。...

    超级仿百度 自动搜索提示下拉框

    "超级仿百度 自动搜索提示下拉框"就是一个专门针对这一需求设计的JavaScript对象,它模仿了百度搜索引擎的搜索提示功能,旨在提供一个高效、易用的解决方案。这个功能对于前端开发者来说非常实用,尤其是那些需要...

    ajax仿百度搜索输入自动提示

    Ajax 仿百度搜索自动提示功能是一种常见的前端交互设计,它极大地提升了用户的搜索体验。在网页中,用户在搜索框输入关键字时,系统能够实时地根据输入内容动态显示相关的搜索建议,这种功能在很多网站,尤其是搜索...

    仿百度搜索框的联想词提示效果js代码.zip

    &lt;!... &lt;... &lt;head&gt; ...meta charset="utf-8" /&gt;...仿百度搜索框的联想词提示效果js代码&lt;... 这是一款纯javaScript实现的仿百度搜索框联想词提示代码,搜索框输入文字自动提示相关联想词js特效。

    仿百度/Google搜索输入框提示JS代码(PHP+MySql数据库版)

    在构建Web应用时,搜索功能是必不可少的一部分,而仿百度/Google搜索输入框提示功能则可以极大地提升用户体验。这个功能通常被称为自动补全或搜索建议,它能够在用户输入搜索关键词时,实时显示与之相关的搜索建议。...

    用php+ajax写的仿百度谷歌搜索下拉自动提示框效果

    这个项目“用php+ajax写的仿百度谷歌搜索下拉自动提示框效果”旨在实现类似百度和谷歌搜索引擎的实时搜索建议功能。下面我们将详细探讨这个过程涉及的关键知识点。 首先,我们要理解**PHP**(Hypertext ...

    JAVA___jQuery+AJAX_仿百度搜索功能

    "JAVA___jQuery+AJAX_仿百度搜索功能" 这个标题指出我们要探讨的是一个基于Java、jQuery和AJAX技术实现的项目,目标是模仿百度搜索引擎的实时搜索功能。在这个项目中,用户输入关键词时,将通过AJAX异步请求发送到...

    仿百度搜索提示框

    【标题】"仿百度搜索提示框"涉及到的技术和知识点主要包括前端界面设计、后端服务器处理、数据库交互以及异步数据加载。以下是对这些关键领域的详细解释: 1. 前端界面设计: 这部分主要是创建一个与百度搜索框...

    仿百度搜索(智能提示)

    【标题】"仿百度搜索(智能提示)"是一个项目,旨在模仿百度搜索引擎的智能提示功能,让用户在输入关键词时能够获得实时的搜索建议。这个功能在实际应用中极大地提高了用户的搜索效率,通过预测用户可能要搜索的词汇,...

    php 仿百度搜索提示

    总的来说,"PHP仿百度搜索提示"涉及到的技术栈包括JavaScript、PHP、MySQL,以及可能的前端库(如jQuery)和后端框架(如Laravel或Symfony)。通过这些技术的结合,我们可以构建出一个高效且用户体验良好的搜索提示...

    jQuery 仿百度搜索功能

    其中,搜索引擎的快速智能提示功能是提高用户体验的重要手段,这正是"jQuery 仿百度搜索功能"所要实现的目标。这个功能通过结合jQuery库和Struts2框架,为网页提供类似百度搜索的自动补全效果,使用户能够更快速、更...

    智能提示-仿百度

    标题“智能提示-仿百度”指的是一个开发项目或者功能实现,其主要目标是模拟百度搜索引擎在用户输入时的智能提示功能。这种功能通常被称为自动补全或预测搜索,它能够根据用户输入的部分关键词,快速提供可能的搜索...

    仿百度搜索提示源码

    【标题】:仿百度搜索提示源码 在互联网搜索引擎领域,百度以其强大的搜索功能和智能的搜索提示赢得了用户的广泛喜爱。这里的"仿百度搜索提示源码"是指开发人员模仿百度搜索引擎实现的一种搜索提示功能的代码。这个...

    仿Goole、百度搜索下拉提示及可编辑下拉框的组合

    也就是说,将仿Goole、百度搜索下拉提示功能及可编辑下拉框功能组合到一起,两个功能均在网上找的,根据实际情况,修改了一些代码,使得控件元素的定位更灵活,更准。存html编码,使用非常方便。 需要注意的是,页面...

    php+ajax仿百度谷歌搜索下拉效果

    在IT行业中,实现类似百度和谷歌的搜索下拉效果是一项常见的需求,这能极大地提升用户体验。本项目以"php+ajax"技术栈为基础,旨在创建一个动态的搜索建议功能,让用户在输入关键字时就能看到相关的搜索建议,无需...

    ajax实现仿百度搜索提示(suggestion)

    **Ajax 实现仿百度搜索提示(Suggestion)** 在网页开发中,为了提供更好的用户体验,我们经常需要实现类似百度搜索的实时提示功能。这个功能在用户输入查询词时,能够实时展示与输入相关的建议,无需点击搜索按钮...

    仿百度搜索输入框提示JS代码(PHP+MySql数据库版

    总结来说,实现仿百度搜索输入框提示功能,需要结合JavaScript(特别是AJAX)、PHP和MySQL数据库。前端负责监听用户输入,发送请求,以及处理返回的搜索建议;后端负责接收请求,从数据库检索匹配数据,然后以JSON...

    js跨域实现autocomple 仿百度搜索自动提示

    **标题解析:** "js跨域实现autocomple 仿百度搜索自动提示" 这个标题指出我们要讨论的是使用JavaScript(js)来实现一个跨域的自动补全功能(autocomple),并且这个功能是模仿百度搜索的自动提示效果。 **关键词...

Global site tag (gtag.js) - Google Analytics