JQuery UI автозаполнения: результаты подсчета - PullRequest
4 голосов
/ 04 апреля 2011

Я хотел бы знать, есть ли способ подсчета количества результатов, которые отображаются при вводе чего-либо в текстовое поле.Подсчитайте работу li-элементов, но я держу пари, что умнее.Спасибо

Ответы [ 4 ]

7 голосов
/ 04 апреля 2011

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

Все связанные события возвращают только элемент, по которому щелкнули (после отображения списка), или информацию о событии (не о списке).* Вы можете увидеть это здесь: http://jqueryui.com/demos/autocomplete/#event-focus

То, что вы сказали, является наиболее близким решением:

$( "#tags" ).autocomplete({
  source: availableTags,
  open: function(event,ui){
    var len = $('.ui-autocomplete > li').length;
    $('#count').html('Founded '+len+' results');
  }
});
0 голосов
/ 07 января 2018

Это работает для меня.Мое требование - автоматически выбирать в случае размытия, если есть только один соответствующий результат.Ранее я пытался var len= $('.ui-autocomplete > li').length;, но я не работал во всех сценариях.Иногда он складывает предыдущие результаты в count / length.

Ниже код работал для меня:

.on('autocompletechange', function() {
        if ($(this).data('ui-autocomplete').selectedItem === null && ($(this).autocomplete("widget").find( "li" ).length == 1) ) {
            //this will trigger your select automatically so it will handle other custom override you did for select
            $(this).data('ui-autocomplete').menu.element.children('li:first').children('a').trigger('click');
        }
    })
0 голосов
/ 24 августа 2012

Я нашел способ подсчета найденных совпадений, основываясь на ответе Фрэн, но я думаю, что он не на 100% надежен.Тем не менее, это работает для меня.

$('#autocompleteinput').autocomplete({
    source: datasource,
    search: function()
    {
        $(this).data('count',0);
    },
    open: function()
    {
        $(this).data('count',$('.ui-autocomplete > li').length);
    },
    delay: 0
}).keyup(function(){
    $('#count').html('Found '+$(this).data('count')+' items');
});

Задержка должна быть 0, или часто она запускает keyup перед поиском, и это не считается хорошо.

0 голосов
/ 04 июня 2012

Приведенное выше решение не работало для меня, когда я печатал что-то, что не давало результатов. Он продолжает показывать количество результатов из последней подходящей строки. Вот решение, которое сработало.

source: function (request, response) {
    $.getJSON(
        "/Ajax/GetSomeJson.ashx",
        { q: request.term },
        function (data) {
            console.log(data.length);
             $('#count').html('Found '+ data.length +' results');

            response($.map(data, function (item) {
                return item;
            }));
        }
    );
}
...