【AJAX】AJAX实现搜索信息自己主动推荐并补全

        好久没有继续看AJAX的视频教程了,今天就将最后一个教程案例做完。我们在搜索引擎中输入文字时文本框下会提示对应的信息,这个案例就是实现这样的基本功能,代码比較粗糙还须要进一步完好,当中有些地方也须要向大神们请教一下。完毕效果截图:


一、事先代码准备工作:

1.   JQueryAutoComplete.html负责页面端的显示

a)     截图例如以下:

b)    代码例如以下:

<!DOCTYPE html>
<html><head><title>自己主动补全演示样例</title><meta http-equiv="content-type" content="text/html; charset=UTF-8"><script type="text/javascript" src="jslib/jQuery.js"></script>
<span style="white-space:pre">	</span><script type="text/javascript" src="jslib/jqueryauto.js"></script><!--<link rel="stylesheet" type="text/css" href="./styles.css">--></head><body>补全演示样例:<span style="white-space:pre">	</span><input type="text" id="word"/><span style="white-space:pre">	</span><input type="button" value="提交"/><br/><span style="white-space:pre">	</span><div id="auto"></div></body>
</html>

c)     注:页面端HTML代码基本上在后面的编写中不会改变。

2.   jqueryauto.js负责对页面元素进行更改

3.   wordxml.jsp存储信息推荐的XML数据

a)     初始代码例如以下(后期需改动):

<!-- 这个JSP返回的是XML数据,contentType的值是text/xml -->
<%@ pagelanguage="java" contentType="text/xml; charset=UTF-8"pageEncoding="utf-8"%>
<!-- 返回XML数据,将全部数据都返回,等待后台能够完整协作后再限制返回内容 -->
<words><word>absolute</word><word>anyone</word><word>anything</word><word>apple</word><word>abandon</word><word>breach</word><word>break</word><word>boolean</word>
</words>

4.   AutoComplete.java后台Servlet

a)     初始代码例如以下(为了简单起见Servlet不会进行推断操作。所以后面基本上也不会进行更改):

import java.io.IOException;
importjavax.servlet.RequestDispatcher;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/*** @author Ginger* 补全内容后台代码*接收用户请求*/
public class AutoCompleteextends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponseresp)throws ServletException, IOException {String word=req.getParameter("word");
//          将字符串保存在request对象中req.setAttribute("word", word);
//          请求转发到视图层RequestDispatchertemp=req.getRequestDispatcher("wordxml.jsp");temp.forward(req, resp);}@Overrideprotected void doPost(HttpServletRequest req,HttpServletResponse resp)throws ServletException, IOException {doGet(req, resp);}
}


二、接下来我们就对jqueryauto.js进行编写

代码的功能能够依据功能和先后顺序分为:

1.   设置推荐文字弹出框auto的样式:

2.   设置button的点击事件:

3.   为输入文本框加入键盘事件

a)     键盘事件分对当按下字母键、上下键、回车键时进行处理:

                          i.         字母键:向后台提交文本框数据

                         ii.         上下键:设置推荐文本被高亮的效果

                       iii.         回车键:模拟button被点击的效果

4.   终于代码

//表示当前高亮的节点
var highlightindex=-1;
$(document).ready(function(){
//    依据输入框设置弹出框的样式var wordInput=$("#word");var wordInputOffset=wordInput.offset();//隐藏自己主动补全div框$("#auto").hide().css("border","1pxblack solid").css("position","absolute")
.css("top",wordInput.height()+wordInputOffset.top+"px").css("left",wordInputOffset.left+"px").width(wordInput.width());//    为文本框加入键盘按下并弹起事件$("#word").keyup(function(event){
//    处理文本框中的键盘事件
//    假设输入字母、退格键、删除键,则将信息发送到server    var myEvent=event || window.event;var keyCode=myEvent.keyCode;if(keyCode>=65&&keyCode<=90 || keyCode==8 ||keyCode==46){//     1.首先获取文本框内容var wordText=$("#word").val();//     2.将内容发送给server(文本不为空的情况下才发送数据)var autoNode=$("#auto");if(wordText!=""){$.post("AutoComplete",{word:wordText},function(data){//                   2.1转换dom对象为JQuery对象var jqueryObj=$(data);//                   2.2找到全部word节点varwordNodes=jqueryObj.find("word");//                   2.3遍历全部word节点。取出单词内容,加入到auto弹出框中//                   每次提交数据前清空补全框数据autoNode.html("");$(wordNodes).each(function(i){//                          获取单词内容var wordNode=$(this);
//                                       将节点加入到弹出框中                                     autoNode.append($("<div>").html(wordNode.text()));});if(wordNodes.length >0){autoNode.show();}else{autoNode.hide();}                                 },"xml");}else{autoNode.hide();
//                         隐藏弹出框同一时候重置高亮值highlightindex=-1;}}else if(keyCode==38 || keyCode==40){
//    假设输入上下button,则补全内容会被选中if(keyCode==38){
//                  向上
//                  找到当前补全框的全部子节点varautoNodes=$("#auto").children("div");if(highlightindex!=-1){
//                         假设原来存在高亮节点。则将背景改为白色autoNodes.eq(highlightindex).css("background-color","white").css("color","black");highlightindex--;}else{highlightindex=autoNodes.length-1;}if(highlightindex==-1){
//                         假设改动索引值后index变成-1,则将索引值指向最后一个元素highlightindex=autoNodes.length-1;}autoNodes.eq(highlightindex).css("background-color","blue").css("color","white");}if(keyCode==40){
//                  向下
//                  找到当前补全框的全部子节点varautoNodes=$("#auto").children("div");if(highlightindex!=-1){
//                         假设原来存在高亮节点。则将背景改为白色autoNodes.eq(highlightindex).css("background-color","white").css("color","black");}highlightindex++;if(highlightindex==autoNodes.length){
//                         假设改动索引值后index变成-1,则将索引值指向最后一个元素highlightindex=0;}autoNodes.eq(highlightindex).css("background-color","blue").css("color","white");}     }else if(keyCode==13){//     假设输入回车//     补全框中有选中内容if(highlightindex!=-1){varautoNodes=$("#auto").children("div");//            将高亮文本赋给输入框$("#word").val(autoNodes.eq(highlightindex).text());highlightindex=-1;$("#auto").hide();alert("已提交。");}else{//      补全框中没有选中内容alert("已提交。");$("#auto").hide();}}});
//    为button添加点击事件$("input[type='button']").click(function(){alert("已提交。");})
});


三、最后是在后台进行数据的筛选

终于wordxml.jsp代码为

<!-- 这个JSP返回的是XML数据,contentType的值是text/xml -->
<%@ pagelanguage="java" contentType="text/xml; charset=UTF-8"pageEncoding="utf-8"%>
<!-- 返回XML数据,将全部数据都返回,等待后台能够完整协作后再限制返回内容 -->
<%String word=(String)request.getAttribute("word");
%>
<words><% if("absolute".startsWith(word)){ %><word>absolute</word><%}%><% if("anyone".startsWith(word)){ %><word>anyone</word><%}%><% if("anything".startsWith(word)){ %><word>anything</word><%}%><% if("apple".startsWith(word)){ %><word>apple</word><%}%><% if("abandon".startsWith(word)){ %><word>abandon</word><%}%><% if("breach".startsWith(word)){ %><word>breach</word><%}%><% if("break".startsWith(word)){ %><word>break</word><%}%><% if("boolean".startsWith(word)){ %><word>boolean</word><%}%>
</words>

Author:事始

Sign:仅仅要你还在尝试。

就不算失败。


转载于:https://www.cnblogs.com/gcczhongduan/p/5089480.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

n个骰子的点数 java_n个骰子的点数和为s的概率集合输出(Java)

问题描述&#xff1a;把n个骰子仍在地上&#xff0c;所有骰子朝上一面的点数之和为s,输入n,打印出s的所有可能出现的概率问题分析&#xff1a;这是一道应用动态规划思想的题目&#xff0c;而动态规划最难的就是要找最优子结构。并采取一种称为备忘录的方法避免重复计算。因为备…

2015的最后一天

今天是2015年的以后一天&#xff0c;3点半就要下班了。 也是我毕业&#xff0c;来到这家公司第5个月。 毕业后&#xff0c;去学习php&#xff0c;我喜欢这个&#xff0c;希望通过自己的努力给自己一个未来。 没什么可说的&#xff0c;加油吧&#xff0c;2016&#xff01;&#…

java se是不是java_Java SE和java EE究竟有什么实质上的区别

1、Java SE:Java SE 是Java平台标准版的简称(Java Platform, Standard Edition) (also known as Java 2 Platform) &#xff0c;用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序。Java SE包括用于开发Java Web服务的类库&#xff0c;同时&#xff0c;Java S…

使用IntelliJ IDEA 14和Maven创建java web项目

安装Maven 下载安装 去maven官网下载最新版。 解压到安装目录。 配置 右键桌面的计算机图标&#xff0c;属性–>高级系统设置–>环境变量&#xff0c;添加M2_HOME的环境变量&#xff0c;然后将该变量加入的PATH中。 注意 必须要有JAVA_HOME和个环境变量&#xff0c;不然m…

工作那点小事

目录 工作那点小事总结回到顶部工作那点小事 离开了“火龙果”&#xff0c;领导&#xff0c;领导的领导&#xff0c;领导的领导的领导&#xff0c;同事&#xff0c;同事等等&#xff0c;给你上了一堂课。 面试时&#xff0c;问&#xff1a;为什么离开上一家公司&#xff1f;答&…

java textfield赋值_Java中怎么把运行结果显示到textfield中

两种办法:1) 在原有方法里加设置到textfield的命令public static void ipaddress(){try{InetAddress inet InetAddress.getLocalHost();System.out.println(inet.getHostAddress());text1.setText(inet.getHostAddress());//new added}catch(UnknownHostException e){System.e…

01算法 java_蓝桥杯:基础练习 01字串【JAVA算法实现】

题目描述对于长度为5位的一个01串&#xff0c;每一位都可能是0或1&#xff0c;一共有32种可能。它们的前几个是&#xff1a;0000000001000100001100100请按从小到大的顺序输出这32种01串。输入格式本试题没有输入。输出格式输出32行&#xff0c;按从小到大的顺序每行一个长度为…

Testlink1.9.5的安装配置

前两天搭建了Testlink环境&#xff0c;在这里整理记录下过程中遇到的问题以及搭建流程。Testlink版本&#xff1a;1.9.5操作系统&#xff1a;Windows7 32bit 步骤一&#xff1a;安装XAMPP 下载解压xampp压缩包&#xff0c;点击安装包xampp-win32-1.8.0-VC9-installerservice se…

Git的基础

http://backlogtool.com/git-guide/cn/intro/intro2_3.html转载于:https://www.cnblogs.com/liucyi/p/5107806.html

UIAutomator输入中文

之前一直是英文的测试环境&#xff0c;包括手机也是英文的&#xff0c;app也是英文的&#xff0c;涉及不到中文输入法的东西。但现在在写中文的app&#xff0c;所以需要输入中文。看到网上的解决办法如下: 下载https://github.com/sumio/uiautomator-unicode-input-helper源码 …

java 自定义解码_[求助],java如何使用自定义注解对入参进行解密?

正好之前做过自定义ArgumentResolver相关的开发。先指出你的一个问题&#xff0c;ArgumentResolver是对你Controller方法上的单个参数进行解析&#xff0c;也就是说&#xff0c;你的参数是什么类型&#xff0c;就要return什么类型&#xff0c;直接返回一个String除非你的参数就…

java 视频 缩略图_如何使用java提取视频缩略图或某一帧的图片

[Java] 纯文本查看 复制代码public class CreateImage {/*** 获取指定视频的帧并保存为图片至指定目录* [urlhome.php?modspace&uid952169]Param[/url] videofile 源视频文件路径* param framefile 截取帧的图片存放路径* throws Exception*/public static void fetchFram…

jni java返回数组_Android开发实践:Java层与Jni层的数组传递

Android开发中&#xff0c;经常会在Java代码与Jni层之间传递数组(byte[])&#xff0c;一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层&#xff0c;由Jni层的Socket代码发送出去&#xff0c;当然&#xff0c;Jni层也需要把从Socket接收到的数据流返回给Java层。我…

查出数字字符字段中非数字字符的记录

最近&#xff0c;将原来的数字符字段转换为数字时&#xff0c;总报错误&#xff1a;无效数字。 如何找出其中哪些是非数字字符的记录&#xff1f;比较麻烦的事。下面是用Oracle DB自带的函数translate可以找出来的 1.创建测试表 Create Table TestChar( ITEM_NUMBER VARCHAR…

jsp mysql 注入_由Jsp+Mysql注入到root权限的全程展 【好久没有安全类文章了,转一篇看看】...

由JspMysql注入到root权限的全程展最近有点空闲,所以写点垃圾文章来消磨一下时间.文中没有什么技术含量,如果要转载,请注明作者并保持文章的完整.很多人可能都知道asp,php的编程要防止sql注入漏洞,而并不知道jsp编程同样也需要防备sql注入漏洞.其实,一旦jsp代码有注入漏洞,将直…

MySQL Replication Error 处理一例

故障现象 MySQL slave status详情 mysql> show slave status\G *************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.10.10.101Master_User: rootMaster_Port: 3306Connect_Retry: 60Master_L…

java中的time_java中的Time处理

得到当前时间1. Calendar.getInstance().getTime();2. new Timestamp(System.currentTimeMillis());3. new Timestamp((Calendar.getInstance().getTime()).getTime());--------------------------------|date------------------------------------------------------Simple…

ubuntu14.04LTS openssh-server 手动安装配置步骤

先用能上网的机器下载&#xff1a;zlib-1.2.5.tar.bz2、openssh-5.6p1.tar.gz、openssl-0.9.8o.tar.tar&#xff0c;接下来&#xff0c;准备安装。 步骤如下&#xff1a; 1、首先解压安装zlib&#xff1a;tar -xf zlib-1.2.5.tar.bz2&#xff0c;会在当前目录下生成zlib目录。进…

java tls 证书_在使用Java 8重新协商TLS_1.2期间,服务器证书更改受到限制

我对SSL很陌生,并且被看似已知的问题所困扰.我的应用程序是SSL客户端,并调用另一个为双向SSL启用的组件.两个组件中的证书都是正确的,有时连接工作正常.每个服务器都有自己的服务器证书和私钥,但具有相同的根证书和中间证书.服务器中的SSL检查在Apache SW LB中完成.|----------…

将前台json对象传入java后台

前台json格式的数据如何传入后台 1. 将要传入后台的数据组装成JSON格式的字符串: var jsonStr [{name:jim , age:20} , {name:king , age:26},{name:jge , age:30}] 2. 使用JQuery的ajax请求后台 jQuery.ajax({ type: "post", url: url, dataType : json, data : {m…