Ajax实现自动补全
发布时间:2020-12-16 02:03:42 所属栏目:百科 来源:网络整理
导读:AJax 后台代码: span style="font-size:12px;"public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWr
AJax 后台代码: <span style="font-size:12px;"> public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); // 表示页面传过来的字符串,用于和服务端的单词进行完整匹配 String keyWord = request.getParameter("keyWord"); // 将字符串保存在request对象中 request.setAttribute("keyWord",keyWord); // 将请求转发给视图层(注意AJAX中,这个所谓的视图层不返回页面,只返回数据,所以也可以称作是一个数据层) request.getRequestDispatcher("keyWord.jsp").forward(request,response); out.close(); } </span> Js代码:
// 表示当前高亮的节点 var highlightindex = -1; var timoutid ; $(document).ready(function(){ // 自动补全框最开始应该隐藏起来 jQuery('input[type='button']').css('width',90).css('height',36+"px"); jQuery('#keyWord').css('width',400); var wordInput = jQuery('#keyWord'); var wordInputOffset = wordInput.offset(); jQuery('#aout').hide().css('width',398).css('border','solid 1px ') .css('text-align','left') .css('position','absolute') .css('top',124+'px' ) .css('left',433 + 'px'); // 给文本框添加键盘按下并弹起的事件 jQuery('#keyWord').keyup(function(event){ // 处理文本框中的键盘事件 var myEvent = event || window.event; var keyCode = myEvent.keyCode; // 如果输入的是字母,应该将文本框中最新的信息发送给服务器 // 如果输入的是推个键或删除键,也应该将文本框的最新发送给服务器 if(keyCode >= 65 && keyCode <= 90 || keyCode == 8 || keyCode == 46){ // 变量所有的word节点,取出单子内容,然后将单词内容添加到弹出框中 var autoNode = jQuery('#aout'); //1 首先获取文本框中的内容 var keyText = jQuery('#keyWord').val(); // 判断是否为空 if(keyText != ""){ // 2.将文本框中的内容发送给服务器 // 对上次服务器完成的延迟操作进行取消 // clearTimeout(timoutid); // // 延迟 // timoutid = setTimeout(function (){ jQuery.post('comption?keyWord='+ encodeURI(keyText),function(data){ // 将dom对象data转出jQuery对象 var jQueryobj = jQuery(data); // 找到所有的word节点 var wordNodes = jQueryobj.find('keyWord') autoNode.html(""); wordNodes.each(function(i){ // 获取单词的内容 var wordNode = jQuery(this); // 新建div节点,将单词内容加入到新建的节点中 var newDivNode = jQuery("<div>").attr("id",i) ; newDivNode.html(wordNode.text()).appendTo(autoNode); // 将新建的节点加入到谭出库的节点中 // 增加鼠标进入事件,高亮节点 newDivNode.mouSEOver(function(){ // 将原来高亮的及诶单取消高亮 if(highlightindex != -1){ $('#aout').children("div").eq(highlightindex) .css("background-color",'white'); } // 记录新新的高亮索引 highlightindex = jQuery(this).attr('id'); // 鼠标进入的及节点高亮 jQuery(this).css("background-color",'threedlightshadow'); }); // 增加鼠标移出 newDivNode.mouSEOut(function (){ jQuery(this).css("background-color",'white'); }); // 增加鼠标点击事件,可以进行补全 newDivNode.click(function (){ var comText = $(this).text(); $('#aout').hide(); jQuery('#keyWord').val(comText); }); }); // 如果服务器端有数据返回,则显示弹出框 if(wordNodes.length>0){ autoNode.show(); }else{ autoNode.hide(); // 弹出框隐藏的同时,高亮节点按引值也制成-1 highlightindex = -1; } },'xml'); // },500); }else{ autoNode.hide(); } }else if(keyCode == 38 || keyCode == 40){ // 如果输入的是向上38向下40按键 if(keyCode == 38){ //向上 var autoNodes = $('#aout').children("div"); if(highlightindex != -1){ // 如果原来存在高亮节点,则将背景颜色改成白色white autoNodes .eq(highlightindex).css("background-color",'white'); highlightindex --; }else{ highlightindex = autoNodes.length -1; } if(highlightindex == -1){ // 如果修改索引值以后index变成-1,则将索引值向最后一个元素 highlightindex = autoNodes.length -1; } // 让现在高亮的内容变成红色 autoNodes.eq(highlightindex).css("background-color",'threedlightshadow'); var comText = $('#aout').children("div").eq(highlightindex).text(); jQuery('#keyWord').val(comText); } if(keyCode == 40){ //向下 var autoNodes = $('#aout').children("div"); if(highlightindex != -1){ // 如果原来存在高亮节点,则将背景颜色改成白色white autoNodes .eq(highlightindex).css("background-color",'white'); } highlightindex ++; if(highlightindex == autoNodes.length){ // 如果修改索引值以后index变成-1,则将索引值向最后一个元素 highlightindex = 0; } // 让现在高亮的内容变成红色 autoNodes .eq(highlightindex).css("background-color",'threedlightshadow'); var comText = $('#aout').children("div").eq(highlightindex).text(); jQuery('#keyWord').val(comText); } }else if(keyCode == 13){ // 如果输入的回车 // 下拉框有高亮内容 if(highlightindex != -1){ // 取出高亮节点的文本内容 var comText = $('#aout').hide().children("div").eq(highlightindex).text(); highlightindex = -1; // 文本框中的内容变成高亮节点的内容 jQuery('#keyWord').val(comText); }else{ // 下拉框没有高亮内容 alert("文本框中的["+jQuery('#keyWord').val()+"] 被提交了"); $('#aout').hide(); // 让文本框失去焦点 jQuery('#keyWord').get(0).blur(); } } }); // 给按钮添加事件,表示文本框中的数据提交 jQuery('input[type='button']').click(function(){ alert(encodeURI('文本框中的[' + jQuery('#keyWord').val() + ']被提交了')); }); }); JSP:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.10.1.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/js/jqueryaout.js"></script> <style type="text/css"> .gao{ height: 30px; border-right-width: 2px; border-bottom-width: 1px; border-left-width: 1px; border-top-width:2px; border-bottom-style: gainsboro; border-left-style: gainsboro; border-right-color: scrollbar; border-bottom-color: scrollbar; line-height:30px; font-size:18px; } </style> </head> <body > <center><img alt="" src="imgae/907180034.png"><br/> <input type="text" id="keyWord" class="gao" /><input type="button" value=" 百度一下 "/> <div id="aout" ></div> </center> </body> </html>
<!-- itcast的ajax补全实例 --> <!-- 与传统应用视图层不同,这个jsp返回的是xml的数据,因此contentType --> <%@ page contentType="text/xml;charset=UTF-8" language="java" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <% String keyWord = (String) request.getParameter("keyWord"); %> <words> <% if("李景".startsWith(keyWord)){%> <keyWord>李景</keyWord> <% }%> <% if("李小龙".startsWith(keyWord)){%> <keyWord>李小龙</keyWord> <% }%> <% if("李连杰".startsWith(keyWord)){%> <keyWord>李连杰</keyWord> <% }%> <% if("李世民".startsWith(keyWord)){%> <keyWord>李世民</keyWord> <% }%> <% if("李刚".startsWith(keyWord)){%> <keyWord>李刚</keyWord> <% }%> <% if("刘德华".startsWith(keyWord)){%> <keyWord>刘德华</keyWord> <% }%> <% if("刘亦菲".startsWith(keyWord)){%> <keyWord>刘亦菲</keyWord> <% }%> <% if("刘翔".startsWith(keyWord)){%> <keyWord>刘翔</keyWord> <% }%> <% if("刘玉梅".startsWith(keyWord)){%> <keyWord>刘玉梅</keyWord> <% }%> <% if("周鹏".startsWith(keyWord)){%> <keyWord>周鹏</keyWord> <% }%> <% if("周润发".startsWith(keyWord)){%> <keyWord>周润发</keyWord> <% }%> <% if("周星驰".startsWith(keyWord)){%> <keyWord>周星驰</keyWord> <% }%> <% if("张学友".startsWith(keyWord)){%> <keyWord>张学友</keyWord> <% }%> <% if("张雨绮".startsWith(keyWord)){%> <keyWord>张雨绮</keyWord> <% }%> <% if("张宇".startsWith(keyWord)){%> <keyWord>张宇</keyWord> <% }%> <% if("小刘".startsWith(keyWord)){%> <keyWord>小刘</keyWord> <% }%> <% if("asdfg".startsWith(keyWord)){%> <keyWord>asdfg</keyWord> <% }%> <% if("asdfdd".startsWith(keyWord)){%> <keyWord>asdfdd</keyWord> <% }%> <% if("ajhksd".startsWith(keyWord)){%> <keyWord>ajhksd</keyWord> <% }%> <% if("asda".startsWith(keyWord)){%> <keyWord>asda</keyWord> <% }%> </words>
很高兴与你们分享:
希望对需要实现Ajax自动补全的朋友们有帮助!
谢谢!
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |