我想知道是否可以计算在文本框中输入内容时显示的结果数量。计算li元素的工作,但我敢打赌,这是一种更聪明的方式。感谢
答案 0 :(得分:7)
我认为这不可能直接使用JQueryUI Events。我一直在寻找一种没有成功的方法。
所有相关事件仅返回单击的元素(显示列表后)或有关事件的信息(不是列表)。
您可以在此处查看: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');
}
});
答案 1 :(得分: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;
}));
}
);
}
答案 2 :(得分: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,或者通常会在搜索之前触发密钥,并且不会很好。
答案 3 :(得分:0)
这对我有用。我的要求是,如果只有一个匹配结果,则自动选择on on blur事件。以前我试过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');
}
})
答案 4 :(得分:0)
Fran的回答很好,但是它将从该页面上所有'.ui-autocomplete'中计数为'li'。 此解决方案仅从当前自动完成操作中计算“ li”个元素:http://www.jbmurphy.com/2012/04/27/how-to-get-the-count-of-items-returned-in-jquery-autocomplete/
open: function(event,ui){
var len = $(this).autocomplete("widget").find( "li" ).length;
},