Ajax實現自動補全
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自動補全的朋友們有幫助! 謝謝!
相關推薦
Ajax實現自動補全
AJax 後臺程式碼: <span style="font-size:12px;"> public void doPost(HttpServletRequest request, HttpServletResponse response) throws S
Ajax和Json實現自動補全
scrip serve rds data character style pragma get writer 1、index.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"
JSP AJAX模擬實現自動補全的兩種方式
//Servlet的方式 package web; import java.io.IOException; import java.io.PrintWriter; import javax.ser
AutoCompleteTextView與自定義Adapter實現自動補全
AutoCompleteTextView繼承自TextView,是一種可以實現自動補全的功能的TextView。先看效果: 該功能在目前很常見,例如在使用者進行登入的時候或者註冊的時候都用到了這種功能,在Android中這樣的效果我們可以藉助AutoCo
Mac: mac git 的安裝 及實現自動補全
htm use path raw spa file con get all 1.檢查是否裝了brew $ brew list如果沒有,拷貝以下命令到終端 回車.可以安裝好brewruby -e "$(curl -fsSL https://raw.githubusercont
Jquery實現自動補全功能
今天因為公司全去搞活動了,所以在網上看了一會兒jquery,在這裡詳細介紹一下基於jquery的autoComplete的實現。 首先,向大家看下自己實現的最簡單的結果: ![簡單效果](https://img-blog.csdn.net/201
百度等搜尋引擎智慧提示(JSONP跨域實現自動補全搜尋建議)
---------------------------------------搜尋引擎JSONP介面--------------------------------------------- 提示:URL中的 #content# 為搜尋的 關鍵字 1.谷歌(Google
jquery Autocomplete 實現自動補全(四)解決jquery 高版本不支援browser方法
解決jquery 高版本不支援browser方法 前幾篇的例子是在 jquery 版本1.7.1 下使用的都沒問題,但最近在我們的專案中jquery版本換成了 1.9 ,執行後發現不能實現自動補全功能了。後來在網上找了很多資料,才發現 juqery
Android自定義AutoCompleteTextView實現自動補全Email
本篇主要實現了你可以自行控制從第一個字元開始進行聯想 public class AutoComplete extends AutoCompleteTextView { //輸入字元進行聯想,@163.com、@126.com、@qq.com、@sina.com、
asp.net + ajax + sqlserver 自動補全功能
程式碼下載頁面:http://download.csdn.net/detail/zhanghui_hn/6994105 說明:資料庫連線字串在web.config檔案中,為方便執行使用的是官方的Northwind資料庫。 參考(向其作者致敬): ² http://ww
【輸入智慧提示功能】PHP+jQuery實現自動補全功能
前面手工寫了一個下拉自動補全功能,寫的簡單,只實現了滑鼠選擇的功能,不支援鍵盤選擇。由於專案很多地方要用到這個功能,所以需要用心做一下。發現select2這個外掛的功能可以滿足當前需求。 在使用jquery外掛select2的過程中遇到了一些疑惑,無論是穿json資料還
java中用jquery AutoComplete 實現自動補全(一)簡單小例子
java中用jquery AutoComplete 實現自動補全(一) 最近要做一個搜尋功能
mac git 的安裝 及實現自動補全
完成 隱藏文件 con span 說明 killall github -html --help 1.檢查是否裝了brew $ brew list 如果沒有,拷貝以下命令到終端 回車.可以安裝好brew ruby -e "$(curl -fsSL https
Ajax+Json實現百度自動補全
search.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath();
Ajax實現搜尋引擎自動補全功能
上程式碼: 搜素框 Search <input type="text" name="name" class="inputtable" id="name" />
第三百六十八節,Python分布式爬蟲打造搜索引擎Scrapy精講—elasticsearch(搜索引擎)用Django實現搜索的自動補全功能
技術 django 分布 全功能 -s col ron 搜索 創建 第三百六十八節,Python分布式爬蟲打造搜索引擎Scrapy精講—用Django實現搜索的自動補全功能 elasticsearch(搜索引擎)提供了自動補全接口 官方說明:https://www
使用百度地圖實現詳細地址自動補全
默認 tro int() div inner 使用 wid type 實現 <!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scal
使用百度地圖實現詳細地址自動補全(補全bug''事件只能綁定到一個上的問題')
item 頁面 tid col border nconf complete ane result loadMapAutocomplete("suggestId","searchResultPanel"); loadMapAutocomplete("suggest
【easyui-combobox】下拉菜單自動補全功能,Ajax獲取遠程數據源
combo -c -o efi 字段 data app script resp 這個是針對easyUI的下拉菜單使用的,Ajax獲取遠程數據源 HTML 頁面 <input id="uname" name="uname" class="easyui-combo
jquery的輸入框自動補全功能+ajax
image -- spa 數據 adding box utf 分類 .com jquery的輸入框自動補全功能+ajax 2017年05月10日 18:51:39 辣姐什麽鬼 閱讀數:1461 標簽: web前端 更多 個人分類: web前端