2015-06-02 49 views
0

我有一个简单的自动完成测试,可以与硬编码数据一起使用。.keyup事件替代

然而,当我加入我自己的数据(包含超过1000个数据),它不工作,只显示第一个字母,所以如果我的数据是“苹果”

当我是B型 - 它显示了香蕉但是当“A”消失时,我不能输入“BA”。

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

这是工作代码:

var validOptions = ["Bold", "Normal", "Default", "100", "200"] 
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; 
} 
}); 

所以这些信件:大胆”, “普通”, “默认”, “100”, “200” 的工作,但

尽快。我改变validOptions到:

var validOptions ='@Url.Action("SerialProdNumStockSiteAutoComplete", "Ajax")?stocksitenum=LW&model=' + $("#Form_Prod_Num").val(); 

它并不如它应该工作

是否有另一种方式来做到这一点,或者你知道我要去哪里错了。

这个问题是关于替代.keyup

SerialProdNumStockSiteAutoComplete代码:

  public JsonResult SerialProdNumStockSiteAutoComplete(string term,string stocksitenum,string model) 
    { 
     return Json(AutoComplete.DeviceFromStockSite(term, stocksitenum, model), JsonRequestBehavior.AllowGet); 
    } 

现货设备:

public static List<string> DeviceFromStockSite(string term, string stocksitenum, string model) 
    { 
     //devices will always come from serialised stock 
     var qryStock = 
      SC42Ctx.SPNlocs 
       .Where(x => x.Nloc_Site_Num.StartsWith(stocksitenum) 
          && x.Nloc_Part_Num == model 
          && x.Nloc_Ord_Num == null) 
       .Select(
        s => 
         new TicketSerialNumber 
         { 
          SerialNumber = s.Nloc_ID_Num, 
          Source = stocksitenum, 
          Call = s.Nloc_Ord_Num.ToString() 
         }) 
       .ToList(); 

当我复制网址这表明:

http://localhost:58172/Ajax/SerialProdNumStockSiteAutoComplete?stocksitenum=LW&model=MP4000BADP&term=4&_=1433235435372

这是当我进入4并且不可能添加任何其他

+0

可能重复(http://stackoverflow.com/questions/30571248/using -keyup功能对过滤器自动完成) –

+0

作为您的重复,http://stackoverflow.com/questions/30571248/using-keyup-function-to-filter-auto-complete,该作品的版本一个数组,不是一个字符串的版本。 –

+0

其不一样的,我如果theres另一种选择为.keyup,其他问题我没有答案,询问,所以我要提出新问题,以改变一切,而不是告诉我,我的错误,你可以请尝试给一个解决方案 –

回答

0
Try using the minLength option of autocomplete to specify the minimum number of characters: 

$('#ac').autocomplete({ 
autoFocus: true, 
source: validOptions, 
minLength: 3 
}) 
.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; 
} 
}); 
+0

是不工作 –

0

此代码是罪魁祸首:

if (!isValid) { 
    this.value = previousValue 
} else { 
    previousValue = this.value; 
} 

这是什么说的是像值不匹配,那么它不会让你输入这个值。

更新你的代码为:

$(document).ready(function() { 
    var validOptions = ["Bold", "Normal", "Default", "100", "200"] 
    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; 
      } 
     } 

    }); 
}); 
+0

我希望它不会让我输入值。那就是整个这一点,你只能输入数据。当我添加url.action时,我也说它不工作,所以有另一种方式我可以去这个 –

+0

@mali在这种情况下,你需要使用'minLength'属性,我会相应地更新我的答案。 –

+0

分钟长度没有工作,我用这个,问题是它停止后的第一个字母。但硬编码工作,但我的网址操作不允许它出于某种原因,也有3点不同的数据来,你可以在这个问题 –

0

替代.keyup

显示错误,当用户输入数据以外的东西从自动完成

看来,你想要使用响应事件http://api.jqueryui.com/autocomplete/#event-response

搜索完成后在显示菜单之前触发。用于本地处理建议数据...这个事件总是在搜索完成时触发,即使菜单不会显示,因为没有结果...

这将不适用于硬编码数据的小提琴,因为它只适用于使用URL进行搜索(您需要)。

,因为它发生之前搜索已完成.keyup不起作用:

当您使用硬编码的数据(根据小提琴),一切都很好,但是当你改变,使源是一个URL,通过自动完成(可以通过在浏览器控制台中查看网络进行确认)来调用URL(执行搜索) - 这会在发生.keyup时立即执行很短的时间(尽可能)。您可以通过在您的动作中添加Thread.Sleep()以及在js中添加各种console.log来确认此情况。

+0

看下我的答案,它似乎工作 –

0

正确的我已经找到了答案

东西简单:使用.keyup功能来过滤自动完成]的

var source = validOptions; 
      var found = $('.ui-autocomplete li').text().search(source); 
      console.debug('found:' + found); 
      if (found < 0) { 
       $(this).val(''); 
       alert("please select from auto complete"); 
      } 
+0

@自由这个作品,简单! –