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

时间:2015-06-01 10:33:05

标签: javascript jquery asp.net-mvc jquery-ui keyup

使用.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个值)

1 个答案:

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