Мои знания Javascript и jQuery очень ограничены, но мне удалось, с некоторой помощью, получить функцию автозаполнения там, где я хотел бы ее видеть.

Я хочу ограничить результаты моего автозаполнения любой длиной, которую я хочу. Я знаю следующий код для ограничения результатов:

source: function(request, response) {
    var results = $.ui.autocomplete.filter(airports, request.term);
    response(results.slice(0, 10));
}

Но мой «источник» уже использует функцию для поиска по определенным значениям и ключам в моем массиве терминов:

function airportArray(request, response) {
    var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
    response($.grep(airports, function(value) {
        return matcher.test(value.iata) || matcher.test(value.city) || matcher.test(value.airport);
    }));
}

Как добавить фильтр в мою уже закодированную функцию?

JSFIDDLE: https://jsfiddle.net/cgaybba/17p7uyvf/

Я пробовал много вариантов, но, как я уже сказал, мои знания ограничены, чтобы успешно объединить две функции.

Любая помощь будет высоко ценится.

0
cgaybba 24 Апр 2017 в 22:09

2 ответа

Лучший ответ

Если вы хотите просто отфильтровать результаты не более чем для 10 элементов, вы можете просто добавить функцию среза к возвращаемому массиву из $.grep:

  response(
     $.grep(airports, function(value) {
        return matcher.test(value.iata) || 
               matcher.test(value.city) ||   
               matcher.test(value.airport);
      })
     .slice(0, 10)
  );
0
Yousef 24 Апр 2017 в 19:20

Попробуй это:

    var cur = 0;
    var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
    response(
      $.grep(airports, function(value) {
          var result = matcher.test(value.iata) || matcher.test(value.city) || matcher.test(value.airport);           
          if (cur >= 10 && result == true) { result = false; } else { cur = cur + 1; }
          return result;
      })
    );

Вы уже были почти там.

0
trevster344 24 Апр 2017 в 19:23