jQuery 自动完成预过滤结果 - 显示全部
jQuery autocomplete pre-filtered results - show all
我有一个 ajax 功能可以搜索用户数据库。所有用户名都被放入一个数组中,如
var usernames = ["Mike Scott", "Mike Whosname", "Mike Johns", "Mike Nicolas"];
很简单,我希望自动完成功能只显示此数组中的任何内容。或者完全关闭搜索,这样它就不会第二次过滤我的结果。
原因是,我的 SQL 代码也会搜索用户 ID,因此如果我键入 "mscott",我的 servlet returns "Mike Scott" 将被放入usernames
数组。
我希望他们能够 select "Mike Scott" 如果他们输入 "mscott"。
自动完成正在尝试在我的数组中搜索 "mscott",但未显示任何结果,因此我希望它只显示数组中的所有内容。
这可能吗?
谢谢。
当前代码:
$('#userInput').autocomplete({source: usernames, search: "", minLength: 0}).keyup(function(){
var url = "/AJAX/SearchUsers.do?searchQ=mscott";
$.ajax(url, {
type: "GET",
datatype: "json",
success: function(data) {
for (var i =0; i < data.length; i++) {
usernames.push(data[i].username);
}
}
});
$(this).autocomplete("option", {source: usernames, search: "", minLength: 0});
});
来自jQuery UI API:
search( [value ] )
Triggers a search event and invokes the data source if the event is
not canceled. Can be used by a selectbox-like button to open the
suggestions when clicked. When invoked with no parameters, the current
input's value is used. Can be called with an empty string and
minLength: 0 to display all items.
可以这样执行:
$('#userInput').focus(function(){
$(this).autocomplete( "search", "" );
});
回答你的问题,是的,有办法。查看更多:http://api.jqueryui.com/autocomplete/#method-search
我解决了我的问题,这是一个我忽略的小问题,但仍然值得回答我自己的问题,以防其他人之前没有考虑过这个问题。
我的问题是因为我的结果是预过滤的,我正在重置 usernames
键上的数组以显示一组全新的结果。
但是,下面的代码:
usernames = [];
不是重置当前数组的好方法,因为变量被重新声明并且 对原始数组(自动完成使用的)的引用丢失 。所以我的控制台显示我的用户名数组有新值,但自动完成根本没有显示任何新值。
感谢@Twisty 提供帮助,尽管我没有提供我正在使用的一些代码。他的 fiddle 帮助我清理了很多东西。
我最终使用以下方法清除了数组:
usernames.length = 0;
新代码:
$('#userInput').autocomplete({
source: usernames,
search: "",
minLength: 0
}).keyup(function(){
var inputField = $(this);
var site = $('#site').val();
var url = "/AJAX/SearchUsers.do?searchQ="+inputField.val()+"&site="+site;
if (inputField.val().length > 3){
$.ajax(url, {
type: "GET",
datatype: "json",
success: function(data) {
taggedData = data;
for (var i =0; i < data.length; i++) {
usernames.push(data[i].username);
}
}
});
}
$(this).autocomplete("search", "");
usernames.length = 0;
});
我有一个 ajax 功能可以搜索用户数据库。所有用户名都被放入一个数组中,如
var usernames = ["Mike Scott", "Mike Whosname", "Mike Johns", "Mike Nicolas"];
很简单,我希望自动完成功能只显示此数组中的任何内容。或者完全关闭搜索,这样它就不会第二次过滤我的结果。
原因是,我的 SQL 代码也会搜索用户 ID,因此如果我键入 "mscott",我的 servlet returns "Mike Scott" 将被放入usernames
数组。
我希望他们能够 select "Mike Scott" 如果他们输入 "mscott"。
自动完成正在尝试在我的数组中搜索 "mscott",但未显示任何结果,因此我希望它只显示数组中的所有内容。
这可能吗?
谢谢。
当前代码:
$('#userInput').autocomplete({source: usernames, search: "", minLength: 0}).keyup(function(){
var url = "/AJAX/SearchUsers.do?searchQ=mscott";
$.ajax(url, {
type: "GET",
datatype: "json",
success: function(data) {
for (var i =0; i < data.length; i++) {
usernames.push(data[i].username);
}
}
});
$(this).autocomplete("option", {source: usernames, search: "", minLength: 0});
});
来自jQuery UI API:
search( [value ] )
Triggers a search event and invokes the data source if the event is not canceled. Can be used by a selectbox-like button to open the suggestions when clicked. When invoked with no parameters, the current input's value is used. Can be called with an empty string and minLength: 0 to display all items.
可以这样执行:
$('#userInput').focus(function(){
$(this).autocomplete( "search", "" );
});
回答你的问题,是的,有办法。查看更多:http://api.jqueryui.com/autocomplete/#method-search
我解决了我的问题,这是一个我忽略的小问题,但仍然值得回答我自己的问题,以防其他人之前没有考虑过这个问题。
我的问题是因为我的结果是预过滤的,我正在重置 usernames
键上的数组以显示一组全新的结果。
但是,下面的代码:
usernames = [];
不是重置当前数组的好方法,因为变量被重新声明并且 对原始数组(自动完成使用的)的引用丢失 。所以我的控制台显示我的用户名数组有新值,但自动完成根本没有显示任何新值。
感谢@Twisty 提供帮助,尽管我没有提供我正在使用的一些代码。他的 fiddle 帮助我清理了很多东西。
我最终使用以下方法清除了数组:
usernames.length = 0;
新代码:
$('#userInput').autocomplete({
source: usernames,
search: "",
minLength: 0
}).keyup(function(){
var inputField = $(this);
var site = $('#site').val();
var url = "/AJAX/SearchUsers.do?searchQ="+inputField.val()+"&site="+site;
if (inputField.val().length > 3){
$.ajax(url, {
type: "GET",
datatype: "json",
success: function(data) {
taggedData = data;
for (var i =0; i < data.length; i++) {
usernames.push(data[i].username);
}
}
});
}
$(this).autocomplete("search", "");
usernames.length = 0;
});