如何在jquery自动完成结果的末尾添加自定义列表项

时间:2010-01-22 21:51:02

标签: jquery autocomplete

我正在使用jquery自动完成功能,并且我已经设置了这些变量

$("#some_id").autocomplete("search.php?in=somewhere", {
        width: 270,
        selectFirst: false
});
$('#some_id').setOptions({max: 5});

正如你所看到它返回5个列表项(结果),我想添加第六个列表项,其中应该显示一些文本以及除了这5个以外存在多少个结果。

我该怎么做?

3 个答案:

答案 0 :(得分:3)

可能需要围绕此功能进行编辑。

    function fillList() {
        list.empty();
        var max = limitNumberOfItems(data.length);
        for (var i=0; i < max; i++) {
            if (!data[i])
                continue;
            var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
            if ( formatted === false )
                continue;
            var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0];
            $.data(li, "ac_data", data[i]);
        }
        // INSERT YOUR ADDITIONAL ENTRY HERE... 
        listItems = list.find("li");
        if ( options.selectFirst ) {
            listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
            active = 0;
        }
        // apply bgiframe if available
        if ( $.fn.bgiframe )
            list.bgiframe();
    }

答案 1 :(得分:3)

非常感谢! 这就是我做的事情

function fillList() {
  list.empty();
  var max = limitNumberOfItems(data.length);
  for (var i=0; i < max; i++) {
   if (!data[i])
    continue;
   var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
   if ( formatted === false )
    continue;
   var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0];
   $.data(li, "ac_data", data[i]);
  }

  listItems = list.find("li");

  //////////////////////////// TOM //////////////////////////////////////////////////////////////////////////////////
  if( data.length > 5 ){ 
   if( (data.length-5) == 1 ){
    listItems[4].innerHTML +='<div style="position:absolute; top:127px; left:0px; width:260px;text-align:right;" >'+(data.length-5)+' item isn\'t shown</div>';
   }
   else{
    listItems[4].innerHTML +='<div style="position:absolute; top:127px; left:0px; width:260px;text-align:right;" >'+(data.length-5)+' items aren\'t shown</div>';
   }
  }
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  if ( options.selectFirst ) {
   listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
   active = 0;
  }
  // apply bgiframe if available
  if ( $.fn.bgiframe )
   list.bgiframe();
 }

答案 2 :(得分:3)

这是我做的,我的后端有一个json用于这个例子(可能,对于默认html的情况,它可以稍微调整一下:),但整个想法应该是相同的

$('#search').autocomplete({
    source: function(request, response) {
        var requestUrl = 'search.php';
        requestUrl += '?term=' + $('#search').val();
        $.getJSON(requestUrl, request, function(data){
            // I know here - what kind of array of json objects I'll get as
            // a result, with <li> elements it should be even easier (I guess)
            // AND: this will add item, if there are more than 5 elms in the list,
            // but you should get the idea
            if (5 < data.length) {
                data.push({
                    id: -1,
                    value: '',
                    label: 'Put your own question...'
                });
            }
            response(data);
        });
    }
});