Использование функции .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 и по-прежнему продолжать возвращать значения из действия в виде строкового списка и форматировать в частичном представлении, а не в контроллере.