百度下拉提示框
在使用百度搜索时,在输入框中输入部分文字后,下面会将与该文字相关的词组展示出来,该功能就可以使用ajax来实现。 注册输入框的onkeyup事件,该事件触发时,将输入框中填写的内容使用ajax发送到servlet中,在servlet中根据用户的输入去数据库中查询,之后将查询出的数据再发送给前台中,最后将该数据展示在页面即可。
代码示例:
定义html:
<!-- 用户输入框 -->
<div id="divsearch">
<input type="text" name="name" id="name" />
<input type="submit" value="搜索">
</div>
<!-- 下拉提示框 -->
<div id="tips"
style="display: none; border: 1px solid red; background-color: white; width: 128px; top: 135px;">
</div>
在html中编写javascript代码:
<script>
$(function() {
//监听input输入的变化
$("#name").on("input propertychange",function () {
let div = $("#tips");
if (this.value == "") {
//如果没有输入数据则将下拉框隐藏
div.css("display", "none");
}
$.ajax({
url:"/search" , //请求路径
type:"get" , //请求方式
data:{"name":this.value},//请求参数
dataType:"text",//设置接受到的响应数据的格式
//回调函数
success:function (data) {
if (data == "") {
return;
}
let childDiv = "";
//按照,分割字符串
let result = data.split(",");
//遍历将html标签拼接放到div中
for (r of result) {
childDiv += "<div onclick='writeText(this)' onmouseover='changeBackground_over(this)' onmouseout='changeBackground_out(this)'>"+ r +"</div>";
}
//将拼接好的数据放到div中
div.html(childDiv);
//将div展示
div.css("display","block");
},
error:function (aa) {
console.log("出错啦...")
}//表示如果请求响应出现错误,会执行的这个回调函数
});
});
});
//鼠标悬浮时,改变背景色
function changeBackground_over(div){
div.style.backgroundColor = "orange";
}
//鼠标离开时,恢复背景色
function changeBackground_out(div){
div.style.backgroundColor = "";
}
//将文本填充到搜索框
function writeText(div){
//得到搜索框
let searchElement = document.getElementById("name");
searchElement.value = div.innerHTML;//把div中的文本添加到搜索框中
div.parentNode.style.display="none";//把context1的div隐藏
}
</script>
编写servlet用来接收ajax请求并查询数据,这里简化下不去数据库中查询,而是自己构建一个List,将该List作为查询的结果返回给前台:
package com.monkey1024.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 查询
*/
@WebServlet("/search")
public class SearchServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
//根据用户输入的数据去查询数据库,这里省略数据库查询操作,手动编写一个List结果集
List<String> result = new ArrayList<>();
result.add("m1");
result.add("m2");
result.add("m3");
result.add("m4");
result.add("m5");
//把集合中的数据转换为字符串返回到网页
String str = "";
//如果用户输入的内容是以m开头的话,则将数据返回
if(name.startsWith("m")){
for (int i = 0; i < result.size(); i++) {
if(i>0){
str+=",";
}
str+=result.get(i);
}
}
System.out.println(str);
//把数据响应到客户端
response.getWriter().write(str);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
海报
0 条评论
174
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~