2015-06-02 80 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

@自由這個作品,簡單! –