Автозаполнение jqueryui: перечисляет записи с условиями поиска в середине - PullRequest
5 голосов
/ 31 марта 2010

Я использую виджет автозаполнения jqueryui для автозаполнения поля 'страна', но столкнулся с проблемой. Предположим, что пользователь вводит «in», я хочу, чтобы jqueryui перечислял такие страны, как «Индия», «Индонезия», которые начинаются с «in», но в нем также перечислены страны, которые имеют «in» где-то в имени (например, argentina) , Как я могу решить эту проблему?

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

Akshey

1 Ответ

3 голосов
/ 30 апреля 2010

К сожалению, создается впечатление, что автозаполнение 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
});
...