使用.keyup过滤我的自动完成功能。
但是它只允许我输入第一个数字。所以,如果我的数据是“Apple”
当我键入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时,它只适用于第一个字母而不是整个单词。
我确实有一个小提琴,works - 然而,当我添加“URL.action”时,它只接受了第一个字母。 (大约有5000个值)
答案 0 :(得分:0)
在小提琴中,您将可用选项设置为数组:
var validOptions = ["Bold", "Normal", "Default", "100", "200"]
如果您采取行动的结果(直接调用)并将其替换为jsfiddle,您将获得(从评论中获取):
var validOptions = "B061030029,LL-XXX,"
或者,取决于是否包含评论中的引号(不太可能):
var validOptions = ""B061030029,LL-XXX,""
无论哪种方式,这些都不一样。
在浏览器中使用view-source查看Url.Action正在呈现的内容。
您可以更改操作以返回字符串:
"[\"B061030029\", \"LL-XXX\" ]";
然后会给出:
var validOptions = ["B061030029", "LL-XXX"]
与原始选项匹配。
为了整洁,您可以使用PartialView执行此操作,并仍然继续将操作中的值作为字符串列表返回,并在部分视图中而不是控制器中进行格式化。