jQuery自动完成的预过滤结果-全部显示 [英] jQuery autocomplete pre-filtered results - show all

查看:106
本文介绍了jQuery自动完成的预过滤结果-全部显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个ajax函数来搜索用户数据库.所有用户名都会放入一个数组,如

I have an ajax function which searches a database of users. All usernames get put into an array like

var usernames = ["Mike Scott", "Mike Whosname", "Mike Johns", "Mike Nicolas"];

简单地说,我希望自动完成功能仅显示此数组中的内容.要么完全关闭搜索,否则不会再次过滤我的结果.

So simply, I want the autocomplete to just display whatever is in this array. Either that or turn the search off completely so it doesn't filter my results for a second time.

这样做的原因是,我的SQL代码还会搜索用户ID,因此如果我输入例如"mscott",则我的servlet返回"Mike Scott",并将其放入usernames数组中.

The reason for this is, my SQL code also searches userid's so if I type for example "mscott", my servlet returns "Mike Scott" which gets put into the usernames array.

如果他们输入"mscott",我希望他们能够选择"Mike Scott".

I want them to be able to select "Mike Scott" if they input "mscott".

自动完成功能正在尝试在数组中搜索"mscott",该列表不显示任何结果,因此我希望它仅显示数组中的所有内容.

The autocomplete is trying to search my array for "mscott" which is not displaying any results so I want it to just simply display everything in my array.

这可能吗?

谢谢.

当前代码:

$('#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});

  });

推荐答案

我解决了我的问题,这是一个小问题,我只是忽略了,但仍然值得回答我自己的问题,以防万一其他人以前没有考虑过这个问题.

I solved my problem and it was a small issue I simply overlooked but still worth answering my own question just case someone else hasn't considered this before.

我的问题是因为我的结果已经过预过滤,所以我将键上的usernames数组重置为显示全新的结果.

My problem was because my results are pre filtered, I was resetting the usernames array on key up to display a brand new set of results.

但是,以下代码: usernames = [];不是重新设置当前数组的好方法,因为重新声明了变量,并且对原始数组(自动完成功能使用)的引用丢失了.因此,我的控制台显示的是带有新值的用户名数组,而自动完成"则根本没有显示任何新值.

However, the following code: usernames = []; is not a good way of resetting the current array as the variable is redeclared and the reference to the original array (That autocomplete uses) is lost. So my console was showing my usernames array with new values but Autocomplete wasn't showing any new values at all.

即使我没有提供某些我正在使用的代码,也感谢@Twisty提供帮助.他的小提琴帮助我清理了很多东西.

Thankyou to @Twisty for offering help even though I didn't supply some of the code I was using. His fiddle helped me clear a lot of stuff up.

我最终使用以下命令清除了数组:

I ended up clearing the array by using:

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;
});

这篇关于jQuery自动完成的预过滤结果-全部显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆