jqueryui autocomplete:列出中间带搜索词的条目

时间:2010-03-31 13:19:30

标签: jquery-ui autocomplete prefix

我正在使用jqueryui自动完成小部件来自动填充“国家/地区”字段,但我遇到了一个问题。假设用户输入“in”,我希望jqueryui列出像'india'这样的国家,'indonesia'以'in'开头,但它也列出了名称中某处有“in”的国家(如:argentina) 。我该如何解决这个问题?

jQuery(".autocomplete").autocomplete({
    source: CountrySuggestions, //CountrySuggestions is an array in javascript containing the list of countries
    minLength: 2
});

Akshey

1 个答案:

答案 0 :(得分:3)

不幸的是,似乎jQueryUI自动完成功能不允许在阵列源上使用它。但是,您可以将插件的 _initSource 函数挂钩,以在搜索上强制使用正常表达式标记“ ^ ”,如下所示。

我认为这可能被忽略了,因为它的大部分用法被认为是在远程检索中。无论哪种方式,不是一个漂亮的修复,但由于正则表达式剥离功能,它是唯一想到的解决方案。

$.ui.autocomplete.prototype._initSource = function() {
  var array,
    url;
  if ( $.isArray(this.options.source) ) {
    array = this.options.source;
    this.source = function( request, response ) {
      // escape regex characters
      var matcher = new RegExp( "^"+$.ui.autocomplete.escapeRegex(request.term), "i" );
      response( $.grep( array, function(value) {
        return matcher.test( value.label || value.value || value );
      }) );
    };
  } else if ( typeof this.options.source === "string" ) {
    url = this.options.source;
    this.source = function( request, response ) {
      $.getJSON( url, request, response );
    };
  } else {
    this.source = this.options.source;
  }
};

$("#countries").autocomplete({
  source: ["India","Indonesia","Argentina"],
  minLength: 2
});