2011-04-04 75 views
4

我想知道是否有一种方法来计算在文本框中键入内容时显示的结果数量。计算李元素的工作,但我敢打赌,这是一个更聪明的方法。谢谢jquery ui autocomplete:计算结果

回答

5

我认为这是不可能的直接使用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

好的,谢谢:) – Johan 2011-04-04 13:47:54

0

上述解决方案并没有为我工作,当我打字的东西,不返回任何结果。它一直显示最后一个匹配字符串的结果数量。这是一个可行的解决方案。

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

根据Fran的答案,我找到了一种方法来计算找到的匹配,但我认为这不是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,或者经常会在搜索之前触发关键帧并且计数不好。

0

这是为我工作。如果只有一个匹配结果,我的要求是自动选择模糊事件。以前我尝试过var len= $('.ui-autocomplete > li').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'); 
     } 
    })