【发布时间】:2015-06-02 08:25:44
【问题描述】:
我有一个简单的自动完成测试,它适用于硬编码数据。
但是,当我添加自己的数据(其中包含超过 1000 个数据)时,它不起作用并且只显示第一个字母,所以如果我的数据是“Apple”
当我输入 B - 它显示 Banana 但我无法输入“BA”,因为“A”消失了。
我期待我能写出整个单词而不是第一个字母。
这是工作代码:
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;
}
});
所以这些字母:Bold"、"Normal"、"Default"、"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();
当我复制显示的 URL 时:
这是我输入 4 并且无法添加任何其他内容的时候
【问题讨论】:
-
和你的副本stackoverflow.com/questions/30571248/…一样,有效的版本是一个数组,无效的版本是一个字符串。
-
它不一样,我在问是否有 .keyup 的另一种选择,另一个问题我没有得到答案,所以我想问一个新问题来改变一切,而不是告诉我我的错误你能试着给出一个解决方案吗
-
检查来自服务器端的内容。 console.log(vaidoptions)
-
你能把你的
SerialProdNumStockSiteAutoComplete方法代码贴出来吗?
标签: javascript jquery asp.net-mvc jquery-ui