首頁 web前端 js教程 jQuery UI Autocomplete 体验分享_jquery

jQuery UI Autocomplete 体验分享_jquery

May 16, 2016 pm 05:56 PM
ui

支持的数据源
jQuery UI Autocomplete主要支持字符串Array、JSON两种数据格式。
普通的Array格式没有什么特殊的,如下:
复制代码 代码如下:
["cnblogs","博客园","囧月"]

对于JSON格式的Array,则要求有:label、value属性,如下:
复制代码 代码如下:
[{label: "博客园", value: "cnblogs"}, {label: "囧月", value: "囧月"}]

其中label属性用于显示在autocomplete弹出菜单,而value属性则是选中后给文本框赋的值。
如果没有指定其中一个属性则用另一个属性替代(即value和label值一样),如下:
复制代码 代码如下:

[{label: "cnblogs"}, {label: "囧月"}]
[{value: "cnblogs"}, {value: "囧月"}]

如果label和value都没有指定,则无法用于autocomplete的提示。
另外需要注意,对于从服务器端输出的JSON的key必须用双引号,如下:
复制代码 代码如下:
[{"label": "博客园", "value": "cnblogs"}, {"label": "囧月", "value": "囧月"}]

否则可能会出现parsererror错误。
主要的参数
jQuery UI Autocomplete常用的参数有:
Source:用于指定数据来源,类型为String、Array、Function
String:用于ajax请求的服务器端地址,返回Array/JSON格式
Array:即字符串数组 或 JSON数组
Function(request, response):通过request.term获得输入的值,response([Array])来呈现数据;(JSONP是这种方式)
minLength:当输入框内字符串长度达到minLength时,激活Autocomplete
autoFocus:当Autocomplete选择菜单弹出时,自动选中第一个
delay:即延迟多少毫秒激活Autocomplete
其他不常用的就不罗列了。
使用方法
假如页面上有以下输入框:

AJAX请求
通过指定source为服务器端的地址来实现,如下:
复制代码 代码如下:

$("#autocomp").autocomplete({
source: "remote.ashx",
minLength: 2
});

然后在服务器端接收,并输出相应结果,注意默认传递的参数名称为term:
复制代码 代码如下:

public void ProcessRequest(HttpContext context)
{
// 查询的参数名称默认为term
string query = context.Request.QueryString["term"];
context.Response.ContentType = "text/javascript";
//输出字符串数组 或者 JSON 数组
context.Response.Write("[{\"label\":\"博客园\",\"value\":\"cnblogs\"},{\"label\":\"囧月\",\"value\":\"囧月\"}]");
}

本地Array/JSON数组
复制代码 代码如下:

// 本地字符串数组
var availableTags = [
"C#",
"C++",
"Java",
"JavaScript",
"ASP",
"ASP.NET",
"JSP",
"PHP",
"Python",
"Ruby"
];
$("#local1").autocomplete({
source: availableTags
});
// 本地json数组
var availableTagsJSON = [
{ label: "C# Language", value: "C#" },
{ label: "C++ Language", value: "C++" },
{ label: "Java Language", value: "Java" },
{ label: "JavaScript Language", value: "JavaScript" },
{ label: "ASP.NET", value: "ASP.NET" },
{ label: "JSP", value: "JSP" },
{ label: "PHP", value: "PHP" },
{ label: "Python", value: "Python" },
{ label: "Ruby", value: "Ruby" }
];
$("#local2").autocomplete({
source: availableTagsJSON
});

Callback Function方式
通过指定source为自定义函数来实现自定义数据的获取,函数主要有2个参数(request,response),分别用于获取输入的值、呈现结果
本地Array方式获取数据(模仿新浪微博的登录)
复制代码 代码如下:

var hosts = ["gmail.com", "live.com", "hotmail.com", "yahoo.com", "cnblogs.com", "火星.com", "囧月.com"];
$("#email1").autocomplete({
autoFocus: true,
source: function(request, response) {
var term = request.term, //request.term为输入的字符串
ix = term.indexOf("@"),
name = term, // 用户名
host = "", // 域名
result = []; // 结果
result.push(term);
// result.push({ label: term, value: term }); // json格式
if (ix > -1) {
name = term.slice(0, ix);
host = term.slice(ix + 1);
}
if (name) {
var findedHosts = (host ? $.grep(hosts, function(value) {
return value.indexOf(host) > -1;
}) : hosts),
findedResults = $.map(findedHosts, function(value) {
return name + "@" + value; //返回字符串格式
// return { label: name + " @ " + value, value: name + "@" + value }; // json格式
});
result = result.concat($.makeArray(findedResults));
}
response(result);//呈现结果
}
});

JSONP方式获取数据
直接从官方DEMO拿来的,通过发送ajax请求到远程服务器,然后对返回结果进行处理,最后通过response来呈现:
复制代码 代码如下:

$("#jsonp").autocomplete({
source: function(request, response) {
$.ajax({
url: "http://ws.geonames.org/searchJSON",
dataType: "jsonp",
data: {
featureClass: "P",
style: "full",
maxRows: 12,
name_startsWith: request.term
},
success: function(data) {
response($.map(data.geonames, function(item) {
return {
label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
value: item.name
}
}));
}
});
},
minLength: 2
});

主要的事件
jQuery UI Autocomplete有一些事件,可用于在一些阶段进行额外的控制:
create(event, ui):Autocomplete创建时,可以在此事件中,对外观进行一些控制
search(event, ui): 在开始请求之前,可以在此事件中返回false来取消请求
open(event, ui):Autocomplete的结果列表弹出时
focus(event, ui):Autocomplete的结果列表任意一项获得焦点时,ui.item为获得焦点的项
select(event, ui):Autocomplete的结果列表任意一项选中时,ui.item为选中的项
close(event, ui):Autocomplete的结果列表关闭时
change(event, ui):当值改变时,ui.item为选中的项
这些事件的ui参数的item属性(如果有的话)默认有label和value属性,不管在source中设置的数据是Array还是JSON数组,如下3种:
复制代码 代码如下:

["cnblogs","博客园","囧月"]
[{label: "博客园", value: "cnblogs"}, {label: "囧月", value: "囧月"}]
[{label: "博客园", value: "cnblogs", id: "1"}, {label: "囧月", value: "囧月", id: "2"}]

假如是第三种的话,还可以得到ui.item.id的值。
这些事件可以通过2种方式来绑定,如下:
复制代码 代码如下:

// 在参数中
$("#autocomp").autocomplete({
source: availableTags
, select: function(e, ui) {
alert(ui.item.value)
}
});
// 通过bind来绑定
$("#autocomp").bind("autocompleteselect", function(e, ui) {
alert(ui.item.value);
});

通过bind来绑定的方式使用的事件名称为"autocomplete"+事件名称,如"select"就是"autocompleteselect"。
多个值的Autocomplete
一般情况下,输入框的autocomplete仅需要一个值就可以(如:javascript);假如需要多个值(如:javascript,c#,asp.net),则需要绑定一些事件来进行额外处理:
在focus事件中返回false,避免输入框的值被autocomplete的单个值取代
在select事件中组合多个值
在元素的keydown事件做一些处理,理由同1
使用callback function方式的source,来获取最后输入的值,并呈现结果
还是直接拿官方DEMO的代码:
复制代码 代码如下:

// 按逗号分隔多个值
function split(val) {
return val.split(/,\s*/);
}
// 提取输入的最后一个值
function extractLast(term) {
return split(term).pop();
}
// 按Tab键时,取消为输入框设置value
function keyDown(event) {
if (event.keyCode === $.ui.keyCode.TAB &&
$(this).data("autocomplete").menu.active) {
event.preventDefault();
}
}
var options = {
// 获得焦点
focus: function() {
// prevent value inserted on focus
return false;
},
// 从autocomplete弹出菜单选择一个值时,加到输入框最后,并以逗号分隔
select: function(event, ui) {
var terms = split(this.value);
// remove the current input
terms.pop();
// add the selected item
terms.push(ui.item.value);
// add placeholder to get the comma-and-space at the end
terms.push("");
this.value = terms.join(", ");
return false;
}
};
// 多个值,本地数组
$("#local3").bind("keydown", keyDown)
.autocomplete($.extend(options, {
minLength: 2,
source: function(request, response) {
// delegate back to autocomplete, but extract the last term
response($.ui.autocomplete.filter(
availableTags, extractLast(request.term)));
}
}));
// 多个值,ajax返回json
$("#ajax3").bind("keydown", keyDown)
.autocomplete($.extend(options, {
minLength: 2,
source: function(request, response) {
$.getJSON("remoteJSON.ashx", {
term: extractLast(request.term)
}, response);
}
}));

结尾
最后,放上代码:点击下载
更多的资料请看jQuery UI Autocomplete官方演示:http://jqueryui.com/demos/autocomplete
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
艾爾登法環ui怎麼一直顯示 艾爾登法環ui怎麼一直顯示 Mar 11, 2024 pm 04:31 PM

在艾爾登法環中這款遊戲的ui頁面在一段時間以後是會自動進行隱藏的,有很多玩家不知道ui怎麼一直顯示,玩家可以在顯示以及聲音配置中選擇其中的量表顯示配置,點擊開啟即可。艾爾登法環ui怎麼一直顯示1、首先我們進入主選單後,點選【系統配置】。 2.在【顯示及聲音配置】介面,選擇其中的量表顯示配置。 3.點擊開啟即可完成。

兩位Google華人研究員發布首個純視覺「行動UI理解」模型,四大任務刷新SOTA 兩位Google華人研究員發布首個純視覺「行動UI理解」模型,四大任務刷新SOTA Apr 12, 2023 pm 04:40 PM

對AI來說,「玩手機」可不是一件易事,光是辨識各種使用者介面(user interface, UI)就是一大難題:不光要辨識出各個元件的類型,還要根據其使用的符號、位置來判斷組件的功能。對行動裝置UI的理解,能夠幫助實現各種人機互動任務,例如UI自動化等。先前的工作對行動UI的建模通常依賴螢幕的視圖層次信息,直接利用了UI的結構數據,並藉此繞過了從螢幕像素開始對組件進行識別的難題。不過並不是所有的場景下都有可用的視圖層次,這種方法通常會因為物件描述的缺失或結構資訊的錯位而輸出錯誤結果,所以儘管使

Vue 常見的 UI 元件庫有哪些? Vue 常見的 UI 元件庫有哪些? Jun 11, 2023 am 11:47 AM

Vue是一款流行的JavaScript框架,它使用元件化的方式來建立Web應用程式。在Vue生態系統中,有許多UI元件庫可以幫助您快速建立漂亮的介面,並提供豐富的功能和互動效果。在本文中,我們將介紹一些常見的VueUI元件庫。 ElementUIElementUI是一款由餓了麼團隊開發的Vue元件庫,它為開發人員提供了一組優雅,

ui是什麼意思的縮寫 ui是什麼意思的縮寫 Mar 14, 2024 pm 03:20 PM

UI是「User Interface」的縮寫,主要用於描述軟體的人機互動、操作邏輯和介面美觀。 UI設計的目的是讓軟體操作更簡單舒適,充分體現其定位與特性。常見的UI設計分為實體UI和虛擬UI,其中虛擬UI廣泛應用於網際網路領域。

探索最受歡迎的jQuery行動UI框架 探索最受歡迎的jQuery行動UI框架 Feb 27, 2024 pm 12:03 PM

jQuery行動UI框架是一種用於開發行動應用程式的工具,它提供了豐富的介面元件和互動效果,使開發者能夠快速建立優秀的行動用戶介面。在這篇文章中,我們將探索一些最受歡迎的jQuery行動UI框架,並提供具體的程式碼範例來幫助讀者更好地了解和使用這些框架。 1.jQueryMobilejQueryMobile是一個基於HTML5和CSS3的開源行動UI框架,

Android 15 Beta 4 全面測試完成 穩定版發布進入倒數計時 Android 15 Beta 4 全面測試完成 穩定版發布進入倒數計時 Jul 29, 2024 pm 07:57 PM

日前,Google正式向符合資格的Pixel智慧型手機和平板電腦用戶推送了Android15Beta4更新,這標誌著Android15作業系統已邁入平台穩定階段,預示著其穩定版將在接下來的幾天內正式與全球用戶見面。同時,這項進展也為三星電子的Galaxy設備系列加速其OneUI7.0版本的開發過程注入了新的活力。 1.[Android15Beta4推廣三星OneUI7.0穩定建置](https://www.cnbeta.com/articles/tech/1427022.htm)隨著Android15Bet

ux與ui設計的差別是什麼 ux與ui設計的差別是什麼 Sep 27, 2022 pm 03:52 PM

ux與ui設計的差異:1.UX讓介面更好用,UI讓介面更好看;2、UX讓使用者達成目標,UI讓介面提升品牌感;3、UX核心目標引導使用者完成任務,UI不是; 4.UI和UX的交付成果不一樣,UX的輸出包括UX體驗報告、功能定義、功能規劃、專案進度等,而UI交付的包括視覺與互動、視覺設計、品牌設計、動效設計、元件設計和設計語言等等。

ui是什麼意思 ui是什麼意思 Mar 14, 2024 pm 03:09 PM

UI,全名為使用者介面,指的是軟體中人機互動、操作邏輯和介面美觀的設計。它分為實體UI和虛擬UI,其中虛擬UI廣泛應用於行動互聯網。好的UI設計不僅能讓軟體外觀有品味,更重要的是讓軟體操作變得舒適簡易,充分體現軟體的定位與特性。

See all articles