Автозаполнение пользовательского интерфейса jQuery

#jquery-ui #autocomplete

#jquery-пользовательский интерфейс #автозаполнение

Вопрос:

Я использую пользовательский интерфейс jQuery из репозитория Google. Я получаю данные в следующем формате:

 [{name:"test", param1:"test"},{name:"test2", param1:"test2"}...]
  

но при автозаполнении jQuery выполняется поиск в поле с именем «label»
Итак, как я мог бы изменить «метку» на «имя», потому что я хочу отфильтровать информацию, в которой поля имени содержат введенное значение.

Ответ №1:

Читая между строк в вашем сообщении, я вижу, что вы не можете редактировать часть, которая предоставляет данные на страницу, поэтому вам приходится манипулировать тем, что у вас есть. но было бы намного проще просто изменить то, что предоставляется, чтобы соответствовать тому, что вам нужно

Я полагаю, что для того, чтобы это сработало, вам придется переработать параметры в исходном обратном вызове, используя объект запроса и создавая элемент для каждого дочернего элемента, соответствующий тому, который вы хотите. Итак, что-то вроде:

 $( selector ).autocomplete({
  source: function( request, response ) {
    response( function(data){
      for(key in data){
        data[key].label = data[key].name;
      }
      return data;
    } );
  }
});
  

Но я не уверен на 100% в этом коде.

альтернативно вы могли бы переопределить функцию «filter» здесь:

 $.extend( $.ui.autocomplete, {
escapeRegex: function( value ) {
    return value.replace(/[-[]{}()* ?.,\^$|#s]/g, "\$amp;");
},
filter: function(array, term) {
    var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
    return $.grep( array, function(value) {
        return matcher.test( value.label || value.value || value );
    });
}
});
  

изменить поведение, чтобы использовать то, что вы получаете обратно. Но я бы назвал это плохим дизайном / реализацией.