【问题标题】:jQuery UI Autocomplete: search more than just "label" within a local json arrayjQuery UI 自动完成:在本地 json 数组中搜索的不仅仅是“标签”
【发布时间】:2011-01-17 20:23:14
【问题描述】:

*故事:

我有一个带有 2 个搜索栏的网站,用户可以在其中搜索一所学校,然后通过 jQuery 自动完成搜索该学校内的一个班级。我所有的数据都在一个 LOCAL json 数组中,例如:

var school = [{"label": 波士顿大学, "value": 波士顿大学, "nickname": BU}]

*问题:

在搜索时,我想将用户的输入不仅匹配到“标签”,还匹配到“昵称”,以便“波士顿大学”和“BU”都可以搜索该学校。这是我现在的代码:

$(document).ready(function(){
  $("#school").autocomplete({
    appendTo: ".custom-autocomplete",
    source: schools,
    minLength: 0,
    select: function( event, ui ) {
      $("#class").autocomplete({
        appendTo: ".custom-autocomplete",
 source: courses,
 minLength: 2,
 select: function( event, ui ) {
          $('#submit_header_form').attr('class','submit_header_form');
 }
      });
    });
 });

我知道我们可以在远程数据上使用 PHP 来实现这个结果,但是我需要使用本地数组来加快搜索速度,因为我在每个学校都有很多课程。

由于我是新手代码并且堆栈现在功能齐全,因此快速修复将是理想的。感谢大家的帮助!

【问题讨论】:

  • 一种常见的解决方案是在结果名称中包含 nicname。这也是航空业的一个常见问题,例如,查看这个网站flightstats.com/go/Home/home.do,它有机场,如(YYZ) Toronto International。作为评论发布,因为这不是技术答案。

标签: jquery autocomplete


【解决方案1】:

您可以通过提供source 作为回调来做到这一点。有一个example on jQuery UI 网站,但是你可以修改标准实现。

source: function (request, response) {
    var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
    response($.grep(schools, function(value) {
        return matcher.test(value.value)
            || matcher.test(value.nickname);
    }));
}

这是一个小提琴:http://jsfiddle.net/h5E6C/

【讨论】:

  • 正是我想要的。非常感谢德国朗姆酒! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 2018-07-29
  • 2020-06-11
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多