【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,一经查实,立即删除!

相关文章

使用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;答&…

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…

UIAutomator输入中文

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

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

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

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

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

Divide and conquer:Dropping tests(POJ 2976)

最大化平均值 题目大意&#xff1a;给定你n个分数&#xff0c;从中找出k个数&#xff0c;使∑a/∑b的最大值 这一题同样的也可以用二分法来做&#xff08;用DP会超时&#xff0c;可见二分法是多么的实用呵&#xff01;&#xff09;&#xff0c;大体上是这样子&#xff1a;假设最…

java中标准封装结构_java中的构造,封装

今天给大家讲一下面向对象中的构造&#xff0c;封装&#xff1b;构造&#xff1a;构造方法有以下几个特点&#xff1a;1.方法名和类名一致。2.无返回类型。接下来的几种构造样式&#xff0c;直接上代码吧&#xff1a;//这是一个宠物类 有一个属性&#xff1a;名字(name)public …

《白日梦想家》观后感

To see the world, things dangerous to come to, To see behind walls, to draw closer, To find each other and to feel That is the Purpose of LIFE.” 这部片子我很喜欢&#xff0c;大概我在现实生活中&#xff0c;也就是一个梦想家吧。想过很多事&#xff0c;但是真正去…

linux隐藏tomcat版本_Ubuntu 14.04隐藏Tomcat-7.0.52的版本号与操作系统类型

一般情况下&#xff0c;软件的漏洞信息和特定版本&#xff0c;特定操作系统是相关的&#xff0c;因此&#xff0c;软件的版本号以及操作系统类型对攻击者来说是很有价值的。在默认情况下&#xff0c;Tomcat会在返回信息中把自身的版本号&#xff0c;操作系统类型都显示出来&…

自定义tabbar

/** * 注意&#xff1a;* 打开自定义tabbar的背景视图的交互* 选中的tabb视图高度为tabbar背景视图的高度/2-选中视图高度/2* 选中视图加载到tabbar背景视图上* label注意居中&#xff0c;imgView注意选择适应模式&#xff0c;都加载到tabbar背景视图* 设置点击手势的点击事件…

php7与apache整合,apache集成php7.3.5的详细步骤

安装 php首先安装 php 的压缩包&#xff0c;目前下载地址解压文件到这个路径下&#xff1a;D:Program Filesphp-7.3.5(自行选择合适的路径).然后将这个路径加入到环境变量 path 中。然后打开 cmd 运行php -version,输出类似如下&#xff0c;说明安装成功。PHP 7.3.5 (cli) (bui…

php后门 佛像,35张活的再久,也未必见过的照片,图2是佛像通过CT扫描后内部照...

今天这组照片可能很多人都是一次见到&#xff0c;包括小编本人看了也十分惊讶。最大的感触是&#xff0c;很多的商品居然是这么做出来的&#xff0c;看完了才有一种豁然开朗的感觉&#xff0c;废话不多说一起看看吧。鸡蛋里面套鸡蛋1000年前佛像&#xff0c;经过CT扫描后&#…

droidbox官网

droidbox官网&#xff0c;droidbox已经移植到github上了 https://github.com/pjlantz/droidbox 转载于:https://www.cnblogs.com/nightnine/p/5169261.html

java实现缓存中间件,Redis,分布式系统中不可少的缓存中间件

1.为什么要用缓存内存在整个计算机系统来说也就是一个缓存&#xff0c;CPU操作内存速度很快&#xff1b;因为操作数据的时候&#xff0c;先从硬盘中取出数据放到内存中&#xff0c;然后CPU操作数据缓存&#xff1a;提升访问效率&#xff0c;将一些频繁访问地放在缓存里面image.…

matlab自带的人脸分类器,基于MATLAB,运用PCA+SVM的特征脸方法人脸识别

概述&#xff1a;此文章将要描述一种基于MATLAB平台&#xff0c;运用PCA主成分分析方法对图片数据进行降维&#xff0c;运用SVM支持向量机分类器对降维后的图片数据进行分类处理&#xff0c;从而达到人脸识别的目的。首先要感谢以下几篇文章的作者(后面引用会标识文章标号)2.PC…

J2EE的13个规范之(二) JDBC 及其使用

我想大家都知道ODBC是什么&#xff1f;ODBC(OpenDatabaseConnectivity。开放数据库互连)是微软公司开放服务结构(WOSA&#xff0c;WindowsOpenServicesArchitecture)中有关数据库的一个组成部分。它建立了一组规范&#xff0c;并提供了一组对数据库訪问的标准API&#xff08;应…

被恶意上传了.php,轻松解决网站被恶意镜像

老听说有人的网站被恶意镜像&#xff0c;于是我先收藏几种解决方法。镜像站看似一个完整的站点&#xff0c;其实每次用户访问镜像站点&#xff0c;他的小偷程序就会来正版的网站查询数据&#xff0c;并修改相关链接然后呈献给用户。实质上还是在读取原站的数据&#xff0c;我们…

【代码笔记】iOS-对UIView进行截图

一&#xff0c;效果图。 二&#xff0c;工程图。 三&#xff0c;代码。 RootViewController.m #import "RootViewController.h"interface RootViewController ()endimplementation RootViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBund…

mysql中括号_干货!Python与MySQL数据库的交互实战

作者 | Huang supreme&#xff0c;责编 | 郭芮头图 | CSDN 下载自视觉中国安装PyMySQL库如果你想要使用python操作MySQL数据库&#xff0c;就必须先要安装pymysql库&#xff0c;这个库的安装很简单&#xff0c;直接使用pip install pymysql&#xff1b;假如这种方式还是安装不上…