JS+Ajax实现百度智能搜索框


Posted in Javascript onAugust 04, 2017

首先浏览实现后的结果,输入一个a之后会出现包含a的下拉列表,当我们点击某一个的时候,搜索框中就会出现点击的值。实现所需要的主要是ajax+js。

JS+Ajax实现百度智能搜索框

前端search.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" 
  pageEncoding="UTF-8"%> 
<html> 
<head> 
<title>Insert title here</title> 
<script src="js/jquery.min.js"></script> 
<style type="text/css"> 
  *{ 
   margin: 0 auto; 
   padding: 0; 
  } 
  li{ 
    margin:0; 
    height: 20px; 
    width: 200px; 
    list-style: none; 
  } 
  /* #c li:HOVER{ 
   background-color: #F9F9F9; 
  } */ 
  .onmouse{ 
   background-color: #F9F9F9; 
  }  
  .outmouse{ 
   background-color:white; 
  } 
  #contain{ 
   width: 50%; 
  } 
</style> 
<!-- jquery --> 
<script type="text/javascript"> 
var xmlHttp; 
  function getMoreContents() { 
  var content=document.getElementById("keyword"); 
  if(content.value==""){ 
    ClearContent(); 
    return;//如果不设置,传到后台的是空值,所有的值都会被输出 
  } 
  xmlHttp=creatXMLHttp(); 
  //alert(xmlHttp); 
  //要给服务器发送数据 
  var url="searchServlet?keyword="+escape(content.value); 
  xmlHttp.open("GET",url,true); 
  xmlHttp.onreadystatechange=callback; 
  xmlHttp.send(null); 
} 
  //获取XMLHttp对象 
 function creatXMLHttp() { 
  var xmlHttp; 
  if(window.XMLHttpRequest){ 
    xmlHttp=new XMLHttpRequest(); 
  } 
  if(window.ActiveXObject) 
  { 
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    if(!xmlHttp){ 
      xmlHttp=new ActiveXOject("Msxml2.XMLHTTP"); 
    } 
  } 
  return xmlHttp; 
} //获取XMLHttp对象 
  function callback() { 
  if(xmlHttp.readyState==4 && xmlHttp.status==200){ 
     var result=xmlHttp.responseText; 
     //解析数据 
     var json=eval("("+result+")"); 
     //动态显示数据,线束数据在输入框对的下面 
     setContent(json); 
  } 
} 
//设置关联数据的展示 
function setContent(contents) { 
  ClearContent(); 
  var size=contents.length; 
  for(var i=0;i<size;i++) 
    { 
     var nextNode=contents[i];//json格式的第i个数据 
     var li =document.createElement("li"); 
     li.onmouseover=function(){ 
       this.className="onmouse"; 
       document.getElementById("keyword").value=this.innerHTML; 
     } 
     li.onmouseout=function(){ 
       this.className="outmouse"; 
     } 
     var text=document.createTextNode(nextNode); 
     li.appendChild(text); 
     document.getElementById("c").appendChild(li); 
    } 
} 
//清空数据 
function ClearContent() { 
  document.getElementById("c").innerHTML=""; 
} 
//当控件失去焦点时,清空数据 
function outFouce() { 
  ClearContent(); 
} 
//获得焦点时, 
</script> 
</head> 
<body> 
  <div id="contain"> 
    <div style="height: 20px;"> 
      <input type="text" id="keyword" style="size:50px;" onkeyup="getMoreContents()" onblur="outFouce()" onfocus="getMoreContents()">  
      <input type="button" id="bu" value="百度一下" style=""> 
    </div> 
    <div id="popDiv"> 
     <ul id="c"> 
       <li></li> 
     </ul> 
    </div> 
  </div> 
</body> 
</html>

后台searchServlet.Java

package search; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
import net.sf.json.JSONArray; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
/** 
 * Servlet implementation class searchServlet 
 */ 
@WebServlet("/searchServlet") 
public class searchServlet extends HttpServlet { 
  private static final long serialVersionUID = 1L; 
  static List<String> datas=new ArrayList<String>(); 
  static {//假数据,模拟数据库读取 
    datas.add("ajax"); 
    datas.add("bjax"); 
    datas.add("ajaxfd"); 
    datas.add("bfvd"); 
    datas.add("dafdx"); 
    datas.add("fdax"); 
    datas.add("ahg"); 
    datas.add("ddx"); 
  } 
  /** 
   * @see HttpServlet#HttpServlet() 
   */ 
  public searchServlet() { 
    super(); 
    // TODO Auto-generated constructor stub 
  } 
  /** 
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
   */ 
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    doPost(request, response); 
  } 
  /** 
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
   */ 
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    request.setCharacterEncoding("UTF-8"); 
    response.setCharacterEncoding("UTF-8"); 
    String keyword=request.getParameter("keyword"); 
    //System.out.println(keyword); 
    List<String> listdata= getData(keyword); 
  // 返回json,以流的形式写到前台 
    response.getWriter().write(JSONArray.fromObject(listdata).toString()); 
  } 
  //获取假数据中符合条件的值 
  public List<String> getData(String keyword) 
  { 
    List<String> list=new ArrayList<String>(); 
    for(String data:datas) 
    { 
      if(data.contains(keyword)){ 
        list.add(data); 
      } 
    } 
    return list; 
  } 
}

xml配置

<span style="font-size:18px;"><strong><?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
 <servlet> 
  <servlet-name>searchServlet</servlet-name> 
  <servlet-class>search.searchServlet</servlet-class> 
 </servlet> 
 <servlet-mapping> 
  <servlet-name>searchServlet</servlet-name> 
  <url-pattern>/search/searchServlet</url-pattern> 
 </servlet-mapping> 
 <display-name>DropMeum</display-name> 
 <welcome-file-list> 
  <welcome-file>index.html</welcome-file> 
  <welcome-file>index.htm</welcome-file> 
  <welcome-file>index.jsp</welcome-file> 
  <welcome-file>default.html</welcome-file> 
  <welcome-file>default.htm</welcome-file> 
  <welcome-file>default.jsp</welcome-file> 
 </welcome-file-list> 
</web-app></strong></span>

目录结构

JS+Ajax实现百度智能搜索框

总结

以上所述是小编给大家介绍的JS+Ajax实现百度智能搜索框,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js 判断 enter 事件
Feb 12 Javascript
使用js获取QueryString的方法小结
Feb 28 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
Jun 25 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
Nov 22 Javascript
基于JavaScript实现TAB标签效果
Jan 12 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
Jun 12 Javascript
javascript实现滚动效果的数字时钟实例
Jul 21 Javascript
全面了解构造函数继承关键apply call
Jul 26 Javascript
浅析JavaScript中var that=this
Feb 17 Javascript
vue中nextTick用法实例
Sep 11 Javascript
解决layui动态添加的元素click等事件触发不了的问题
Sep 20 Javascript
vue 实现移动端键盘搜索事件监听
Nov 06 Javascript
vue插件vue-resource的使用笔记(小结)
Aug 04 #Javascript
分享Bootstrap简单表格、表单、登录页面
Aug 04 #Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
Aug 04 #Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
Aug 04 #jQuery
vue修改vue项目运行端口号的方法
Aug 04 #Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
Aug 04 #Javascript
微信小程序 本地图片按照屏幕尺寸处理
Aug 04 #Javascript
You might like
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
php文件怎么打开 如何执行php文件
2011/12/21 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
各种快递查询--Api接口
2016/04/26 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
function foo的原型与prototype属性解惑
2010/11/19 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
2014/05/03 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
Python内置函数reversed()用法分析
2018/03/20 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
详解anaconda离线安装pytorchGPU版
2020/09/08 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
解决python3中os.popen()出错的问题
2020/11/19 Python
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
internal修饰符起什么作用
2013/12/16 面试题
思想汇报范文
2013/11/04 职场文书
烹调加工管理制度
2014/02/04 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL