2012-07-24 68 views
0

我有一个jquery自动填充小部件,它使用自定义数据显示项目。除字段字段以外的搜索字段

他们都有一个valuedescription
目前value插入文本框,单击某个项目时,与项目的value是什么是搜索

我想什么做的是有过滤器同时使用的valuedescription过滤时的物品显示,但只保留插入的value

我该如何做到这一点?

+0

不知道你正在使用哪个自动完成插件,我最好的猜测是你必须修改它用来过滤它的项目列表的函数。你使用哪个插件? – 2012-07-24 14:50:49

+0

我们需要查看您正在使用哪种数据。请发布一些代码,例如您对'autocomplete'小部件的调用,并且您的'source'数组 – jackwanders 2012-07-24 14:50:53

回答

1

如果你给autocompleter对象与valuelabel(而不是description)性质的阵列,它会做过滤你,但仅在label(不是value)。

如果您为source option指定函数,则需要自己进行筛选。您会收到一个request参数(一个带有term属性的对象)和一个response参数(一个用结果回调的函数)。然后,您可以使用任何您喜欢的搜索方式自行返回相关结果(例如,您可以在代码中同时搜索valuedescription)。

例如,松散:

$("some selector").autocomplete({ 
    // ...other options... 
    source: function(request, response) { 
     var matches = []; 
     /* ...search for matches in your data using `request.term`, 
      add them to `matches`... 
     */ 
     response(matches); 
    } 
}); 

返回数组可以是只是字符串,或者它可以与valuelabel性质是对象。将显示label,选中时将使用value

因此,例如,这里有一个使用的机场,在那里,当你键入它检查两个value(机场代码)的(短)列表和description(机场名):Live copy | source

jQuery(function($) { 
    var data = [ 
    {value: "ORD", description: "Chicago O'Hare"}, 
    {value: "LHR", description: "London Heathrow"}, 
    {value: "SFO", description: "San Francisco International"} 
    ]; 

    $("#theInput").autocomplete({ 
    source: function(request, response) { 
     var capterm = request.term.toUpperCase(); 
     var matches = $.map(data, function(entry) { 
     if (entry.value.toUpperCase().indexOf(capterm) !== -1 || 
      entry.description.toUpperCase().indexOf(capterm) !== -1) { 
      return { 
      value: entry.value, 
      label: entry.value + " - " + entry.description 
      }; 
     } 
     }); 
     response(matches); 
    } 
    }); 
}); 

所以,键入“或”或“时尚”将告诉你“ORD - 芝加哥奥黑尔”,并选择它会把“ORD”领域。键入“san”或“sfo”会向您显示“SFO - 旧金山国际”并选择它将在该字段中添加“SFO”。

+0

不是'source'只是提供要搜索的字符串数组,而不是匹配查询的字符串数组? – jackwanders 2012-07-24 15:05:44

+0

@jackwanders:如果您为源提供数组,则自动完成程序将为您执行过滤。如果你提供了一个函数或URL,你需要自己进行过滤,自动完成程序将不会执行任何操作。请参阅autocompleter文档的[“概述”](http://jqueryui.com/demos/autocomplete/)部分,这几乎几乎没有提及 - 然后仅仅是因为我提出了一个月票回来得到他们添加它。 :-) jQuery UI很棒。文档(除了主题以外)都不是很好。 – 2012-07-24 15:18:42