金沙网址:jQuery UI Autocomplete 体验分享_jquery_脚本之家

支持的数据源 jQuery UI
Autocomplete主要支持字符串Array、JSON两种数据格式。
普通的Array格式没有什么特殊的,如下: 复制代码 代码如下:
[“cnblogs”,”博客园”,”囧月”]
对于JSON格式的Array,则要求有:label、value属性,如下: 复制代码 代码如下: [{label: “博客园”, value:
“cnblogs”}, {label: “囧月”, value: “囧月”}]
其中label属性用于显示在autocomplete弹出菜单,而value属性则是选中后给文本框赋的值。
如果没有指定其中一个属性则用另一个属性替代,如下: 复制代码 代码如下: [{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.term获得输入的值,response来呈现数据;
minLength:当输入框内字符串长度达到minLength时,激活Autocomplete
autoFocus:当Autocomplete选择菜单弹出时,自动选中第一个
delay:即延迟多少毫秒激活Autocomplete 其他不常用的就不罗列了。 使用方法
假如页面上有以下输入框: AJAX请求
通过指定source为服务器端的地址来实现,如下: 复制代码 代码如下: $.autocomplete({ source:
“remote.ashx”, minLength: 2 });
然后在服务器端接收,并输出相应结果,注意默认传递的参数名称为term: 复制代码 代码如下: public void ProcessRequest {
// 查询的参数名称默认为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” ];
$.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” } ]; $.autocomplete({ source: availableTagsJSON
}); Callback Function方式
通过指定source为自定义函数来实现自定义数据的获取,函数主要有2个参数,分别用于获取输入的值、呈现结果
本地Array方式获取数据 复制代码 代码如下:
var hosts = [“gmail.com”, “live.com”, “hotmail.com”, “yahoo.com”,
“cnblogs.com”, “火星.com”, “囧月.com”]; $.autocomplete({ autoFocus:
true, source: function { var term = request.term,
//request.term为输入的字符串 ix = term.indexOf, name = term, // 用户名
host = “”, // 域名 result = []; // 结果 result.push; // result.push({
label: term, value: term }); // json格式 if { name = term.slice; host =
term.slice { var findedHosts = (host ? $.grep(hosts, function { return
value.indexOf : hosts), findedResults = $.map(findedHosts, function {
return name + “@” + value; //返回字符串格式 // return { label: name + ”
@ ” + value, value: name + “@” + value }; // json格式 }); result =
result.concat($.makeArray; } response; JSONP方式获取数据
直接从官方DEMO拿来的,通过发送ajax请求到远程服务器,然后对返回结果进行处理,最后通过response来呈现:
复制代码 代码如下: $.autocomplete({
source: function { $.ajax({ url: “”,
dataType: “jsonp”, data: { featureClass: “P”, style: “full”, maxRows:
12, name_startsWith: request.term }, success: function {
response($.map(data.geonames, function { return { label: item.name +
(item.adminName1 ? “, ” + item.adminName1 : “”) + “, ” +
item.countryName, value: item.name } })); } }); }, minLength: 2 });
主要的事件 jQuery UI
Autocomplete有一些事件,可用于在一些阶段进行额外的控制:
create:Autocomplete创建时,可以在此事件中,对外观进行一些控制 search:
在开始请求之前,可以在此事件中返回false来取消请求
open:Autocomplete的结果列表弹出时
focus:Autocomplete的结果列表任意一项获得焦点时,ui.item为获得焦点的项
select:Autocomplete的结果列表任意一项选中时,ui.item为选中的项
close:Autocomplete的结果列表关闭时
change:当值改变时,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种方式来绑定,如下: 复制代码 代码如下: // 在参数中 $.autocomplete({
source: availableTags , select: function { alert; // 通过bind来绑定
$.bind(“autocompleteselect”, function { alert;
通过bind来绑定的方式使用的事件名称为”autocomplete”+事件名称,如”select”就是”autocompleteselect”。
多个值的Autocomplete
一般情况下,输入框的autocomplete仅需要一个值就可以;假如需要多个值(如:javascript,c#,asp.net),则需要绑定一些事件来进行额外处理:
在focus事件中返回false,避免输入框的值被autocomplete的单个值取代
在select事件中组合多个值 在元素的keydown事件做一些处理,理由同1
使用callback function方式的source,来获取最后输入的值,并呈现结果
还是直接拿官方DEMO的代码: 复制代码
代码如下: // 按逗号分隔多个值 function split { return val.split; } //
提取输入的最后一个值 function extractLast { return split; } //
按Tab键时,取消为输入框设置value function keyDown { if (event.keyCode
=== $.ui.keyCode.TAB && $.data.menu.active) { event.preventDefault(); }
} var options = { // 获得焦点 focus: function() { // prevent value
inserted on focus return false; }, //
从autocomplete弹出菜单选择一个值时,加到输入框最后,并以逗号分隔 select:
function { var terms = split; // remove the current input terms.pop();
// add the selected item terms.push; // add placeholder to get the
comma-and-space at the end terms.push; this.value = terms.join; return
false; } }; // 多个值,本地数组 $.bind .autocomplete($.extend(options, {
minLength: 2, source: function { // delegate back to autocomplete, but
extract the last term response($.ui.autocomplete.filter( availableTags,
extractLast); // 多个值,ajax返回json $.bind
.autocomplete($.extend(options, { minLength: 2, source: function {
$.getJSON(“remoteJSON.ashx”, { term: extractLast }, response); } }));
结尾最后,放上代码:点击下载。 更多的资料请看jQuery UI
Autocomplete官方演示:

相关文章