JQUERY仿百度谷歌智能提示

  若使用jquery智能提示,则主要使用Ajax动态调用后台。

仿百度谷歌智能提示,说实话,本篇博客仿的不太缜密,有待继续完善。

仿百度谷歌智能提示,思路主要如下:

1.后台根据前台传递的参数进行匹配,提供数据列表。

2.前台美观智能展示选择数据列表

声明:此篇博客的后台是假数据,没有搭建数据库进行匹配。

来一张目前功能截图:

鼠标控制:

键盘控制:

选中之后:

思路:【重点前台】

  1. 监听输入框值变化,然后动态生成显示列表【仿】
  2. 显示列表中绑定各种事件(鼠标移近、移除、单击【仿】
  3. 文本框聚焦以及失焦状态【仿】
  4. 文本框单击状态【仿】
  5. 文本框对方向键的控制【仿】

详细的说明都在js注释中。

后台servlet代码:

package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SearchServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
        response.setContentType("text/xml;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        String key = request.getParameter("key");
        	System.out.println(key+"----------->");
            StringBuilder results = new StringBuilder();
            results.append("<results>");
            results.append("<result key='a1' count='07' ></result>");
            results.append("<result key='a2' count='11' ></result>");
            results.append("<result key='a3' count='18' ></result>");
            results.append("<result key='a4' count='19' ></result>");
            results.append("<result key='a5' count='21' ></result>");
            results.append("<result key='a6' count='31' ></result>");
            results.append("<result key='a7' count='41' ></result>");
            results.append("<result key='a8' count='51' ></result>");
            results.append("</results>");
            out.print(results.toString());
        out.flush();
        out.close();
	}
}

模拟访问代码:

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AccessServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	 String jspkey=request.getParameter("key");
	 System.out.println("jsp..param..key..."+jspkey);
	 PrintWriter ps=response.getWriter();
	 ps.println("successful,you put the key is "+jspkey);
	}
}

前台QUERY代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">

#kw1 {
	width: 529px;
	height: 20px;
	padding: 11px 7px 7px;
	font: 16px arial;
	border: 1px solid #b8b8b8;
	outline: none
}

.btn {
	width: 105px;
	height: 40px;
	padding: 0;
	padding-top: 2px;
	border: 0;
	background-position: -464px -42px;
	background-color: #e6e6e6;
	cursor: pointer;
	font-size: 16px
}
.showresult{
   border: 1px solid #b8b8b8;
   padding: 11px 7px 7px;
   width: 529px;
   margin-left:100px;
   display:none;
   font: 16px arial;
}
.showresultnew{
   border: 1px solid #b8b8b8;
   padding: 11px 7px 7px;
   width: 529px;
   margin-left:99.9px;
   display:block;
   font: 16px arial;
}
input::-ms-clear{display:none;}
</style>
<script type="text/javascript" src="JS/jquery-1.4.2.min.js"></script>
</head>
<script type="text/javascript">
var line = 0;
var oldvalue=$("#kw1").val();//保留最初的输入值
$(function(){
	    // 38 上  40下 13 回车
	  $("#kw1").keydown(function(){
		  if(event.keyCode==13){
			  //若选择的结果与最初输入的结果一致则
			  //模糊匹配框收起来,是通过css样式显示隐藏控制,并且把显示结果的div清空,每次都再重新创建
			  hideresult();
			  clearresult();
			  if($("#kw1").val()==""){
				  alert("warning,the key can't be empty");
				  return;
			  }
			  //随意的查询url,模拟百度或谷歌搜索具体的东西
			  $.get("access",{key:$("#kw1").val()},function(responseinfo){
				  $("#responseinfo").html(responseinfo);
			  });
		  }else if(event.keyCode == 40){  //方向键下移
              $("table tbody tr").eq(line)
                  .css("backgroundColor", "gray")
                  .css("color", "white");  //这是选中状态、白字蓝底
              $("table tbody tr").eq(line < 0 ? 0 : line - 1)
                  .css("backgroundColor", "white")
                  .css("color", "black");  //非选中状态、 黑字白底
              if(line==$("table tbody tr").length){
            	  $("#kw1").val(oldvalue);
            	  line=0;
            	  return;                //若下移键移动到最后一个,那么搜索框中的值恢复成原来的输入值,类似百度谷歌
            	                         //若下移键移动到最后一个,那么把下次line值从头再来,即line=0
            	                         //注意必须有个return,否则程序继续前进,显示结果有误
              }else{
            	  line=line+1;          //若下移键没有移动到最后一个,那么记录下一个line值
              }
              $("#kw1").val($("table tbody tr").eq(line-1).find("td").eq(0).html());//搜索框中值跟着下移键选择而变化,类似百度谷歌
          }else if(event.keyCode==38){  //方向键上移
        	  if(line==0){                       //若上移到第一个,那么搜索框中的值恢复到原来的输入值,类似百度谷歌
                  $("table tbody tr").eq(line)
                  .css("backgroundColor", "white")  //其实就是把已经选中的记录恢复成非选中状态,否则变成搜索框值=原来值,但是第一条依然处于选中状态
                  .css("color", "black");
            	  $("#kw1").val(oldvalue);
            	  line=$("table tbody tr").length;  //若上移到第一个,那么把下移line值变成table最后一个tr,即line=table tr .length
            	  return;
        	  }else{
        		  line=line-1;
        	  }
              $("table tbody tr").eq(line)
                  .css("backgroundColor", "gray")
                  .css("color", "white");           //选中状态
              $("table tbody tr").eq(line > $("table tbody tr").length ? 0 : line + 1)
                  .css("backgroundColor", "white")
                  .css("color", "black");          //非选中状态

              $("#kw1").val($("table tbody tr").eq(line).find("td").eq(0).html());//搜索框中值跟着下移键选择而变化,类似百度谷歌
          }
	  });
	  //确定搜索、button事件
	  $("#su1").click(function(){
		  if($("#kw1").val()==""){
			  alert("warning,the key can't be empty");
			  return;
		  }
		  $.get("access",{key:$("#kw1").val()},function(responseinfo){
			  $("#responseinfo").html(responseinfo);
		  });
	  });
	  //不断监听文本框事件,注意:必须写input,否则ie11不执行,以为propertychange不兼容导致的
	  $("#kw1").bind("input propertychange", function(){
		  oldvalue=$("#kw1").val();
		  clearresult();
		  if($("#kw1").val()==""){
			  //模糊匹配框收起来
			  hideresult();
		  }else{
			  showresult();//显示框
			  //动态生成table
			  dymictable();
	  }
	  });
	  //文本框失去焦点
	  $("#kw1").blur(function(){
		  //模糊匹配框收起来
          hideresult();
		  clearresult();
	  });
	  //文本框focus事件
	 $("#kw1").focus(function(){
		  clearresult();
		  //若文本框没有内容,则模糊匹配框收起来,否则显示模糊匹配结果
		  if($("#kw1").val()==""){
			  //模糊匹配框收起来
			  hideresult();
		  }else{
			  //显示模糊匹配框
			  showresult();
			  //动态生成table
			  dymictable();
			  }
	  });
	  //文本框点击事件,类似百度、谷歌
	  $("#kw1").click(function(){
		  clearresult();
		  //若文本框没有内容,则模糊匹配框收起来,否则显示模糊匹配结果
		  if($("#kw1").val()==""){
			  //模糊匹配框收起来
			  hideresult();
		  }else{
			  //显示模糊匹配框
			  showresult();
			  //动态生成table
		      dymictable();
			  }
	  });

});
/**
 * 清空div中显示后台结果的table,程序中每次都是重新创建生成的
 */
function clearresult(){
	$("#showresult").html("");
	line=0; //主要是用来控制方向键选择记录的
}
/**
 * 通过css来隐藏查询的结果,并且程序中每次都是重新创建生成查询结果的
 */
function hideresult(){
	 $("#showresult").removeClass("showresultnew");
	 $("#showresult").addClass("showresult");
}
/**
 * 通过css来显示查询的结果,并且程序中每次都是重新创建生成查询结果的
 */
function showresult(){
	  $("#showresult").removeClass("showresult");
	  $("#showresult").addClass("showresultnew");
	  clearinfo();//清空界面返回提示信息
}
/**
 * 动态生成table,显示结果
 */
function dymictable(){
	  var d_table=$("<table id='testtable' width='100%'</table>")//动态显示结果
	  .attr("cellspacing","0");
	  $.get("testinstant.do",{key:$("#kw1").val()},function(xml){
	        $(xml).find("results result").each(function(){
	        	var d_key=$(this).attr("key");
	        	var d_count=$(this).attr("count");
	        	var d_tr=$("<tr></tr>").css("cursor","pointer").mouseover(function(){
	        		$(this).css("backgroundColor", "gray").css("color", "white");
	        	}).mouseout(function(){
	        		$(this).css("backgroundColor", "white").css("color", "black");
	        	}).mousedown(function(){ //鼠标选中,则银行显示框以及直接搜索,类似百度谷歌
	        		$("#kw1").val(d_key);
	        		//收缩
	                hideresult();
	                clearresult();
	                //直接搜索,类似百度谷歌
	  			    $.get("access",{key:$("#kw1").val()},function(responseinfo){
					  $("#responseinfo").html(responseinfo);
				  });
	        	});
	        	var d_td_key=$("<td></td>")
	        	.attr("width","20%")
	        	.attr("style","text-align:left")
	        	.html(d_key);
	        	var d_td_count=$("<td></td>")
	        	.attr("width","80%")
	        	.attr("style","text-align:right")
	        	.html("查询出个数:"+d_count+"记录");
	            d_tr.append(d_td_key);
	            d_tr.append(d_td_count);
	            d_table.append(d_tr);
	            $("#showresult").append(d_table);
	        });
  });
}
/**
 * clear response info
 */
function clearinfo(){
	$("#responseinfo").html("");
}
</script>
<body>
自动搜索框:
<input name="wd" id="kw1"  type="text" maxlength="100"  >
<input class="btn" id="su1" type="button" value="搜搜" ><span id="responseinfo"></span>
<div id="showresult" class="showresult">
</div>
</body>
</html>

至于web.xml配置servlet就不再赘述了,下载代码测试,欢迎拍砖。

JQUERY仿百度谷歌智能提示

时间: 2024-10-09 13:44:55

JQUERY仿百度谷歌智能提示的相关文章

【转】仿百度输入框智能提示的js代码

转自:http://www.jb51.net/article/40783.htm 对于我这个JS菜鸟,能找到这样的实属不容易啊!!! 刚开始老大让做这个功能,真是一点头绪都没有,万分感谢!!! 最近客户需求老是变更,不过有些是因为客户催得急,我没有那么快能完成,所以先做了一个雏形给他们,后来再慢慢改.比如雏形那里我做了一个下拉列表 给他们,事实上他们的数据有200多条,用个下拉列表的话很不现实,你能找那么多?而且那个下拉列表该有多长啊?所以很自然的,我想到了百度那个智能提示 的功能. 参考了一下

基于jQuery仿百度首页换肤功能代码

分享一款基于jQuery仿百度首页换肤功能代码.这是一款类似百度首页的自定义背景图片切换特效代码. 在线预览   源码下载 实现的代码. html代码: <a href="#">换肤</a> <div class="heitiao"></div> <div class="con"><img src="images/content.png" /></d

Jquery 仿百度搜索引擎自动完成功能

源代码如下所示: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>自动完成例子</title> <script type="text/javascript" src="js/jquery-1.4.1.min.js"><

jquery 仿百度搜索下拉框的插件

转载地址:http://www.open-open.com/lib/view/open1420624048437.html 今天写了个下拉插件分享出来 效果: , 可以搜素,也可以使用上下键选择匹配出来的值 css 1 .select4_box { 2 border: 1px solid #5897fb; 3 position: absolute; 4 width: 250px; 5 background: #fff; 6 border-radius: 4px; 7 -webkit-box-sh

仿百度的输入提示功能

/// <reference path="jquery-1.7.1.min.js" /> //实现搜索输入框的输入提示js类 function oSearchSuggest(searchFuc) { var input = $('#txtNaviSearchBox'); var suggestWrap = $('#gov_search_suggest'); var key = ""; var init = function () { input.bind

jQuery 仿百度输入标签插件

之前在做cms系统的时候,由于缺少tag的设计,准备自己搞一个,百般搜索,居然给我发现了一个无论在视觉和操作上都是非常爽的 原作者的地址:http://www.soso.io/article/17109.html 但是,下载回来有一些bug,下面的这个是我修复好的,直接拿来就用: 效果图: 源文件:顺便附上当时查找控件时找的一些资料 点击下载

使用jsonp跨域调用百度js实现搜索框智能提示,并实现鼠标和键盘对弹出框里候选词的操作【附源码和在线测试地址】

项目中常常用到搜索,特别是导航类的网站.自己做关键字搜索不太现实,直接调用百度的是最好的选择.使用jQuery.ajax的jsonp方法可以异域调用到百度的js并拿到返回值,当然$.getScript也可以实现跨域调用js. jsonp快速入门: [原创]说说JSON和JSONP,也许你会豁然开朗,含jQuery用例 关于jquery.ajax的jsonp方法是用以及其error回调函数不能正确执行,请参考园长dudu的文章: jquery ajax中使用jsonp的限制 jQuery插件jQu

仿百度首页选项卡切换效果

效果:http://hovertree.com/texiao/jquery/71/ 代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jQuery仿百度首页选项卡切换效果 - 何问起</title> <base ta

jquery php 百度搜索框智能提示效果

这个程序是利用php+ajax+jquery 实现的一个仿baidu智能提示的效果,有需要的朋友可以下载测试哦. 代码如下 index.html文件,保保存成index.htm <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns=&qu