使用.keyup函数过滤自动完成

我使用.keyup过滤我的自动完成。

但是它只允许我输入第一个数字。 所以如果我的数据是“Apple”

当我键入A – 它显示Apple但我不能输入“AP”,因为“P”消失。

我期待着我可以写出整个单词而不是第一个字母。

码:

  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.action”时,它只接受了第一个字母。 (大约有5000个值)

在小提琴中,您将可用选项设置为数组:

 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执行此操作,并仍然继续将操作中的值作为字符串列表和格式返回到局部视图而不是控制器。