Ограничить результаты в JQuery UI Автозаполнение - PullRequest
119 голосов
/ 01 октября 2011

Я использую автозаполнение jQuery UI.

 $("#task").autocomplete({
     max:10,
     minLength:3,
     source: myarray
 });          

Параметр max не работает, и я все еще получаю более 10 результатов. Я что-то упустил?

Ответы [ 13 ]

257 голосов
/ 01 октября 2011

Вот соответствующая документация для виджета jQueryUI . Нет встроенного параметра для ограничения максимальных результатов, но вы можете легко это сделать:

$("#auto").autocomplete({
    source: function(request, response) {
        var results = $.ui.autocomplete.filter(myarray, request.term);

        response(results.slice(0, 10));
    }
});

Можно указать функцию для параметра source, а затем вызвать slice в фильтрованном массиве.

Вот рабочий пример: http://jsfiddle.net/andrewwhitaker/vqwBP/

43 голосов
/ 01 октября 2011

Вы можете установить для параметра minlength какое-то большое значение или сделать это с помощью css, например,

.ui-autocomplete { height: 200px; overflow-y: scroll; overflow-x: hidden;}
22 голосов
/ 20 апреля 2012

То же самое, что "Jayantha" сказал, что использование css будет самым простым подходом, но это может быть лучше,

.ui-autocomplete { max-height: 200px; overflow-y: scroll; overflow-x: hidden;}

Обратите внимание, что единственная разница - "максимальная высота". это позволит виджету изменить размер на меньшую высоту, но не более 200px

18 голосов
/ 18 ноября 2014

Добавляя ответ Эндрю , вы можете даже ввести a maxResults свойство и использовать его следующим образом:

$("#auto").autocomplete({ 
    maxResults: 10,
    source: function(request, response) {
        var results = $.ui.autocomplete.filter(src, request.term);
        response(results.slice(0, this.options.maxResults));
    }
});

jsFiddle: http://jsfiddle.net/vqwBP/877/

Это должно помочь читабельности кода и удобству сопровождения!

10 голосов
/ 30 июля 2013

вот что я использовал

.ui-autocomplete { max-height: 200px; overflow-y: auto; overflow-x: hidden;}

Переполнение авто, поэтому полоса прокрутки не будет отображаться, когда она не должна.

5 голосов
/ 24 ноября 2017

Я мог бы решить эту проблему, добавив следующее содержимое в мой файл CSS:

.ui-autocomplete {
    max-height: 200px;
    overflow-y: auto;
    overflow-x: hidden;
}
3 голосов
/ 18 ноября 2012

Если результаты получены из запроса mysql, более эффективно ограничить непосредственно результат mysql:

select [...] from [...] order by [...] limit 0,10

, где 10 - максимальное количество строк, которое вы хотите

2 голосов
/ 21 октября 2016

Я перепробовал все решения выше, но мое работало только так:

success: function (data) {
    response($.map(data.slice (0,10), function(item) {
    return {
    value: item.nome
    };
    }));
},
2 голосов
/ 18 августа 2016

Плагин: jquery-ui-autocomplete-scroll со скроллером и прекрасными результатами ограничения

$('#task').autocomplete({
  maxShowItems: 5,
  source: myarray
});
2 голосов
/ 23 апреля 2015

jQuery позволяет вам изменить настройки по умолчанию при подключении автозаполнения к входу:

$('#autocomplete-form').autocomplete({
   maxHeight: 200, //you could easily change this maxHeight value
   lookup: array, //the array that has all of the autocomplete items
   onSelect: function(clicked_item){
      //whatever that has to be done when clicked on the item
   }
});
...