2015-06-01 37 views
0

我正在使用.keyup来过滤自动完成。使用.keyup函数来过滤自动完成

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

当我键入A - 它显示苹果,但我不能键入“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

你可能会提供一个小提琴或一些? – Alex

+0

我有一个工作http://jsfiddle.net/pxfunc/j3AN7/小提琴 - 但是,当我添加我的“URL.action”它只接受第一个字母... –

+0

尝试在您的validOptions变量中使用单引号你用双引号括起来:'var validOptions =“@ Url.Action('SerialProdNumStockSiteAutoComplete','Ajax')?stocksitenum = LW&model =”+ $(“#Form_Prod_Num”).val();' – NightOwlPrgmr

回答

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做到这一点,并且仍然继续以部分视图而不是控制器的形式将行为中的值作为字符串列表和格式返回。

+0

有大约5千个值。不只是1. –

+0

然后你的jsfiddle将不起作用 - 我提供了一个方法来转换Url.Action以按照请求匹配jsfiddle。问题中没有提到有太多的价值观。 –

+0

对不起,为什么它只显示第一个字母? –

相关问题