實現輸入內容提示的功能(仿google_百度輸入框提示)jquery.ui.autocomplete.js外掛
實驗:
對input控制元件實現輸入內容提示功能(仿google_百度輸入框提示功能)
目的:
優化網頁互動性,學習jQuery的部分操作。
知識背景:
利用jquery中的jquery.ui.autocomplete.js外掛。
如以下jquery.ui中的基本測試程式碼:
- <html lang="en">
- <head>
- <meta charset="utf-8" />
- <title>jQuery UI Autocomplete - Default functionality</title>
- <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" />
- <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
- <script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
- <script>
- $(function () {
- var availableTags = ["ActionScript", "測試",
- "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure",
- "COBOL", "ColdFusion", "Erlang", "Fortran", "Groovy",
- "Haskell", "Java", "JavaScript", "Lisp", "Perl", "PHP",
- "Python", "Ruby", "Scala", "Scheme"];
- <SPAN style="COLOR: #ff0000"><STRONG>$("#tags").autocomplete({ source: availableTags });
- </STRONG></SPAN> });
- </script>
- </head>
- <body>
- <div class="ui-widget">
- <label for="tags">Tags: </label>
- <input id="tags" />
- </div>
- </body>
- </html>
- <html lang="en">
- <head>
- <meta charset="utf-8" />
- <title>jQuery UI Autocomplete - Default functionality</title>
- <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" />
- <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
- <script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
- <script>
- $(function () {
- var availableTags = ["ActionScript", "測試",
- "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure",
- "COBOL", "ColdFusion", "Erlang", "Fortran", "Groovy",
- "Haskell", "Java", "JavaScript", "Lisp", "Perl", "PHP",
- "Python", "Ruby", "Scala", "Scheme"];
- <span style="color:#ff0000;"><strong>$("#tags").autocomplete({ source: availableTags });
- </strong></span> });
- </script>
- </head>
- <body>
- <div class="ui-widget">
- <label for="tags">Tags: </label>
- <input id="tags" />
- </div>
- </body>
- </html>
如圖:
作為一個基礎使用者,暫不考慮jqury的各種功能能夠以及語法結構,相信有點程式設計基礎的都知道,在
- <SPAN style="COLOR: #ff0000"> $("#tags").autocomplete({ source: availableTags });</SPAN>
- <span style="color:#ff0000;"> $("#tags").autocomplete({ source: availableTags });</span>
這段程式碼中,對<input>中id為tags的控制元件進行了一個自動補全的繫結,補全繫結資料來源於自定義的陣列availableTags。
我們需要思考的就是如何把這個提供的補全資料和我資料庫中的資料進行繫結。
因此,需要了解一下.autocomplete()這個函式具體的一些引數設定。
具體可以訪問網站檢視:http://api.jqueryui.com/1.9/autocomplete/
這裡我只把與實驗有關的進行說明一下:
minLengthType: Integer
Default:1
如:
- $( ".selector" ).autocomplete({ minLength: 1 });
- $( ".selector" ).autocomplete({ minLength: 1 });
實現的是在輸入多少個字元後彈出提示框選項,一般我覺得定位1比較好,輸入1個字元後開始提示,1也是預設值,當然如果想還沒有輸入就進行提示,可以設定為0。
官方解釋如下:
The minimum number of characters a user must type before a search is performed. Zero is useful for local data with just a few items, but a higher value should be used when a single character search could match a few thousand items.
sourceType: Array orString orFunction( Object request, Function response(Object data
) )Default:none; must be specified
指定資料來源,可以使陣列,字串,或者一個函式(主要與資料庫互動後返回的值)
如果資料來源是陣列(Array)的話,可以有兩種指定方式,如:
An array of strings: [ "Choice1", "Choice2" ]
An array of objects with label
and value
properties:[ { label: "Choice1", value: "value1" }, ... ]
其中label為顯示在提示框中的值,value為選擇後插入到input控制元件中的值。
如果資料來源為字串(String)的話,必須制定一個可以返回JSON資料的URL地址
就是說這裡的String必須是一個JSON結構的字串。(JSON資料簡單說就是可以理解為["str1","str2"]或[ { label: "Choice1", value: "value1" }, ... ]這樣的資料值。因為這裡需要的是資料來源,只要指定好資料來源格式標準即可,你要是有創意,也可以自己定義,總之最後把需要的字串返回即可。
假如提取資料的頁面為http://example.com,那麼傳入該頁面時也會傳入一個作為模糊查詢的引數如:temp
因此url可以構造為http://example.com?temp=[inputstr]這裡inputstr就是輸入在input控制元件目前的值。
如果資料來源為一個互動函式function(request,response),就可以自定義請求,響應需要做的工作,如呼叫一個後臺檔案,資料庫等。如:
- $("#key").autocomplete({
- minLength: 1, source: function (request, response) {
- $.ajax({
- type: "POST",
- url: "ServerData.ashx?keyword=" + request.term,
- contentType: "application/json; charset=utf-8",
- dataType: "json",
- <SPAN style="COLOR: #ff0000">success</SPAN>: function (data) {
- response($.map(data, function (item) {
- return { value: item};
- }));
- },
- <SPAN style="COLOR: #ff0000">error</SPAN>: function () {
- alert("ajax請求失敗");
- }
- });
- }
- })
- $("#key").autocomplete({
- minLength: 1, source: function (request, response) {
- $.ajax({
- type: "POST",
- url: "ServerData.ashx?keyword=" + request.term,
- contentType: "application/json; charset=utf-8",
- dataType: "json",
- <span style="color:#ff0000;">success</span>: function (data) {
- response($.map(data, function (item) {
- return { value: item};
- }));
- },
- <span style="color:#ff0000;">error</span>: function () {
- alert("ajax請求失敗");
- }
- });
- }
- })
呼叫$.ajax並設定其中的type,url,contentType等引數
如url:同String作為資料來源方式類似,但是為了測試,用這種方法的一個好處是可以設定操作成功後的功能
success:成功後執行的功能,返回提取的資料值即可;
error:彈出對話方塊,請求失敗(如資料庫連線失敗,資料查詢命令錯誤等)
實驗效果截圖:
呼叫url功能ServerData.ashx主要程式碼:
- //作為主函式使用
- public void ProcessRequest(HttpContext context)
- {
- context.Response.ContentType = "text/plain";
- string keyword = context.Request.QueryString["keyword"];
- if (keyword != null)
- {
- JavaScriptSerializer serializer = new JavaScriptSerializer(); // 通過JavaScriptSerializer物件的Serialize序列化為["value1","value2",...]的字串
- string jsonString = serializer.Serialize(GetFilteredList(keyword));
- context.Response.Write(jsonString); // 返回客戶端json格式資料
- }
- }
- //作為主函式使用
- public void ProcessRequest(HttpContext context)
- {
- context.Response.ContentType = "text/plain";
- string keyword = context.Request.QueryString["keyword"];
- if (keyword != null)
- {
- JavaScriptSerializer serializer = new JavaScriptSerializer(); // 通過JavaScriptSerializer物件的Serialize序列化為["value1","value2",...]的字串
- string jsonString = serializer.Serialize(GetFilteredList(keyword));
- context.Response.Write(jsonString); // 返回客戶端json格式資料
- }
- }
如果用於測試:可試著在該函式上直接返回一個字串 如: context.Response.Write("Hello World"); 然後再前臺試試輸入"he"看看效果。
該函式主要功能是提取"keword"的值,即使用者輸入的字串,用於模糊查詢關鍵字,對返回的結果進行JSON格式化處理,最後返回。
關於如何利用C#進行資料庫查詢在此省略,可以下載專案綜合包看看(地址見末尾)。
專案包簡介:vs2010,sql server 2008,需要用的js,css均在壓縮包中。
index.html,atest.aspx均可作為測試頁面,需要連線資料庫;
test.aspx為不與資料庫進行互動,採用的是Array作為資料來源的方式,可單獨執行;
資料庫可在web.config中進行更改,查詢語句可以再ServerData.ashx中進行修改,程式碼中也有註釋,可參考。
Good Luck ! 希望對你也有點幫助。
參考:
<!DOCTYPE html>
<html>
<head>
<title>測試</title>
<meta charset="utf-8">
</head>
<body>
<div class="ui-widget">
<label for="tags">標籤:</label>
<input id="tags">
</div>
</body>
<script type="text/javascript" src="jquery-ui-1.9.2.custom/js/jquery-ui-1.9.2.custom.min.js"></script>
<script type="text/javascript" src="index.js"></script>
</html>
$(function() {
var availableTags = [
"ActionScript",
"AppleScript",
"Asp",
"BASIC",
"C",
"C++",
"Clojure",
"COBOL",
"ColdFusion",
"Erlang",
"Fortran",
"Groovy",
"Haskell",
"Java",
"JavaScript",
"Lisp",
"Perl",
"PHP",
"Python",
"Ruby",
"Scala",
"Scheme"
];
function split(val) {
return val.split(/;\s*/);
}
function extractLast(term) {
return split(term).pop();
}
$("#tags")
.bind("keydown", function(event) {
if (event.keyCode === $.ui.keyCode.TAB &&
$(this).data("ui-autocomplete").menu.active) {
event.preventDefault();
}
})
.autocomplete({
minLength: 0,
source: function(request, response) {
response($.ui.autocomplete.filter(
availableTags, extractLast(request.term)));
},
focus: function() {
return false;
},
select: function(event, ui) {
var terms = split(this.value);
terms.pop();
terms.push( ui.item.value );
terms.push("");
this.value = terms.join(";");
return false;
}
});
});
相關文章
- 實現文字框輸入內容提示程式碼例項
- 文字框輸入內容實現智慧提示效果程式碼例項
- js實現的文字框輸入內容自動提示效果程式碼JS
- jQuery Label Better – 友好的表單輸入框提示外掛jQuery
- jQuery文字框內容輸入同步功能jQuery
- jquery 實現郵箱輸入自動提示功能jQuery
- 郵箱輸入實現型別自動提示功能型別
- JavaScript 文字框輸入內容同步JavaScript
- jQuery文字框輸入內容同步jQuery
- vue.js輸入框輸入值內容實時跟著變化Vue.js
- 在文字框輸入關鍵字會彈出內容提示程式碼例項
- app直播原始碼,監聽EditText輸入框內輸入內容的變化APP原始碼
- Angular.js 限制輸入框輸入內容,為純數字AngularJS
- Vue使用antd中input元件去驗證輸入框輸入內容Vue元件
- 密碼框輸入提示效果程式碼例項密碼
- 瀏覽器自帶資訊確認框和提示輸入框瀏覽器
- 相容所有瀏覽器的密碼框輸入提示效果瀏覽器密碼
- CSS 自適應內容寬度的輸入框CSS
- js多個文字框輸入內容同步效果JS
- Vue中實現輸入框的自動補全功能Vue
- 實現動態自動匹配輸入的內容
- 標籤輸入外掛
- imemode 控制輸入法,控制輸入框的輸入法
- InputTip:輸入法狀態提示工具,讓你的輸入更高效
- 解決eclipse中svn外掛總是提示輸入密碼的問題Eclipse密碼
- react輸入框輸入中文bugReact
- 從一次輸入框無法輸入的bug,談如何限制輸入框輸入型別型別
- jQuery手機號碼輸入提示jQuery
- javascript驗證輸入文字框內容是否為數字JavaScript
- JavaScript 驗證輸入文字框內容是否為數字JavaScript
- 兩個文字框同步輸入內容程式碼例項
- iOS清除輸入框內陰影iOS
- input 輸入框只能輸入數字
- Flutter 密碼輸入框 驗證碼輸入框Flutter密碼
- Figma數值輸入框支援拖拽調整功能實現
- 關於Input輸入框藍色外框的操作
- 記錄---實現一個支援@的輸入框
- JS輸入框郵箱自動提示(帶有demo和原始碼)JS原始碼