Использование функции .keyup для автоматического автоматического завершения

Использую .keyup для фильтрации моего авто.

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

когда я набираю A - он показывает Apple, но я не могу набрать "AP", поскольку "P" исчезает.

Я ожидал, что я могу написать целое слово, а не первую букву.

Код:

<input id="ac" /> <span></span>

var validOptions = "@Url.Action("SerialProdNumStockSiteAutoComplete", "Ajax")?stocksitenum=LW&model=" + $("#Form_Prod_Num").val();
previousValue = "";

     $('#ac').autocomplete({
            autoFocus: true,
            source: validOptions
        }).keyup(function () {
            var isValid = false;
            for (i in validOptions) {
                if (validOptions[i].toLowerCase().match(this.value.toLowerCase())) {
                    isValid = true;
                }
            }
            if (!isValid) {
                this.value = previousValue
            } else {
                previousValue = this.value;
            }
        });

Это работало, когда я использовал фиктивные данные, но когда я изменил это на url.action, он работал только для первой буквы, а не для всего слова.

У меня есть скрипка, что работает - Однако, когда я добавил свой URL-адрес, он принял только первую букву. (Существует около 5000 значений)

Ответ 1

В скрипте вы устанавливаете свои доступные параметры в виде массива:

var validOptions = ["Bold", "Normal", "Default", "100", "200"]

если вы берете результат своего действия (как вызвано напрямую) и заменяете его на jsfiddle, вы получите (взяв с комментария):

var validOptions = "B061030029,LL-XXX,"

или, в зависимости от того, включены ли кавычки в комментарии (маловероятно):

var validOptions = ""B061030029,LL-XXX,"" 

в любом случае, это не одно и то же.

Используйте источник просмотра в браузере, чтобы узнать, что отображается в Url.Action.

Вы можете изменить свое действие, чтобы вернуть строку:

"[\"B061030029\", \"LL-XXX\" ]";

который затем дал бы:

var validOptions = ["B061030029", "LL-XXX"]

который соответствует исходным параметрам.

Для аккуратности вы можете сделать это с помощью PartialView и по-прежнему продолжать возвращать значения из действия в виде строкового списка и форматировать в частичном представлении, а не в контроллере.