Подтвердить что ты не робот

Использование автозаполнения jQuery UI начинается с

Я использую автозаполнение jQuery UI с локальным источником данных (source: myArray). Я хочу, чтобы автозаполнение предлагало только те результаты, которые начинаются с введенной строки, а не по умолчанию не учитывает регистр. Есть ли простое решение для этого или я должен предоставить свой собственный запрос/исходный обратный вызов?

4b9b3361

Ответ 1

В настоящее время я сделал это таким образом, не уверен, есть ли лучшее решение:

source: function(request, response) {
    var filteredArray = $.map(orignalArray, function(item) {
        if( item.value.startsWith(request.term)){
            return item;
        }
        else{
            return null;
        }
    });
    response(filteredArray);
},

Этот подход также позволил наложить ограничение (например, 10 предметов) на количество предметов, которые будут показаны.

Ответ 2

Смотрите это:

Слова начала матча:

http://blog.miroslavpopovic.com/jqueryui-autocomplete-filter-words-starting-with-term

Он переопределяет метод автозаполнения фильтра. Я использую это, и он работает хорошо.

// Overrides the default autocomplete filter function to search only from the beginning of the string
$.ui.autocomplete.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);
    });
};

Слово соответствия:

Матч начинается с любого слова в строке.

например. "LHR london" соответствует "лондон"

var matcher = new RegExp("\\b" + $.ui.autocomplete.escapeRegex(term), "i");

\ b утверждают позицию на границе слова (^\w\\ w $\\W\w\\ w\W)

Ответ 3

Я вошел в код Jqueryui и переключил его туда.

Если вы посмотрите в разделе автозаполнения, вы увидите следующую строку:

filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i")

Измените его следующим образом (будьте осторожны, это глобальное изменение):

filter:function(a,b){var g=new RegExp("^" + d.ui.autocomplete.escapeRegex(b),"i")

Ответ 4

Здесь немного другой способ делать чувствительный к регистру поиск. Обратите внимание на отсутствие "i" при создании регулярного выражения во втором примере, что и вызывает нечувствительность к регистру при реализации по умолчанию.

регистр нечувствителен:

            $('#elem').autocomplete({
                source: array
            });

чувствительный к регистру:

            $('#elem').autocomplete({
                source: function(request, response) {
                    var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term, ""));
                    var data = $.grep( array, function(value) {
                        return matcher.test( value.label || value.value || value );
                    });
                    response(data);
                }
            });

Ответ 5

вы можете использовать тот же путь в Примеры автозаполнения JQuery UI

<script>
$("#autocompleteInputField").autocomplete({
  source: function(request, response) {
          var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
          response($.grep(myArray, function(item){
              return matcher.test(item);
          }) );
      }
});
</script>

ИЛИ другим способом с использованием метода $.map not $.grep

<script>
$("#autocompleteInputField").autocomplete({
  source: function(request, response) {
          var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
          response($.map(myArray, function(item) {
               if (matcher.test(item)) {
                   return (item)
               }
          }));
      }
});
</script>

Ответ 6

source: function( request, response ) {
                var t = jQuery.grep(t, function(a){
                        var patt = new RegExp("^" + request.term, "i");
                        return (a.match(patt));
                    });
                response(t);
            },