过滤搜索结果typeahead.js

filtering search results typeahead.js

本文关键字:js typeahead 搜索结果 过滤      更新时间:2023-09-26

我有一个问题:我正在传递一个过滤器到我的搜索结果:这工作得很好,但是typeahead.js缓存已经搜索的查询。

1。当我的过滤器被检查时,输入"黑桃"。(7)

2。使用我的过滤器函数运行查询,从我的数组中删除任何匹配过滤器的结果。(5场)

3。禁用我的过滤器

4。运行相同的查询"spades",返回2个结果。(预期7个结果,实际2个结果)

解决这个问题的最好方法是什么?

var card_search = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('CARD_NAME'),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
 // prefetch: '',
 remote: {
 url : '/search/queries/%QUERY',
 filter: testfilter
        }
});
card_search.initialize();

过滤功能:

function testfilter(data)
{
$("input:checkbox[name=filtericons]:checked").each(function()
{
  var filter = $(this).attr('id');
 if(data.length > 0) 
   {
  for (var i = 0; i < data.length; i++) {
    var datum;
    datum = data[i];
        if ((typeof(datum.SUITE) != "undefined") )
        {
     for(var k=0; k< datum.SUITE.length;k++)
         {
         if( datum.SUITE[k] == filter)
         {
        // data[i]['CARD_VIS'] = 'none';
             delete data[i];
         }
         }
        }//end if
        }
  }
});
return data;
}

在JavaScript中,您通过引用传入数组。

所以当你执行delete data[i]时,我相信你是在删除从远程获取中缓存的数据。

在你的过滤器函数中,试试:

function testfilter(remoteData)
{
var data = remoteData.slice();
$("input:checkbox[name=filtericons]:checked").each(function()
{
  var filter = $(this).attr('id');
 if(data.length > 0) 
   {
  for (var i = 0; i < data.length; i++) {
    var datum;
    datum = data[i];
        if ((typeof(datum.SUITE) != "undefined") )
        {
     for(var k=0; k< datum.SUITE.length;k++)
         {
         if( datum.SUITE[k] == filter)
         {
        // data[i]['CARD_VIS'] = 'none';
             delete data[i];
         }
         }
        }//end if
        }
  }
});
return data;
}