2013-11-26 35 views
6

Çevremdeyim ve sorunuma bir yanıt bulamıyorum. Ben jquery UI çok kullanmadım, ama bu blog girişi jQuery UI Autocomplete with JSON in MVC 4 kullanarak bir otomatik tamamlama uygulamak için bir kılavuz olarak çalışıyorum çünkü hemen hemen ihtiyacım olanla aynı. Muhtemelen "bariz" bir şey kaçırıyorum çünkü henüz otomatik tamamlama sözdiziminin tüm parçalarını anlamıyorum.JqueryUI otomatik tamamlama hatası: Yakalanmamış TypeError: Nesnenin özellik 'sonuçları' # <Object> bir işlev değil

Sorun: Önerilerin görünmesini sağlayabilirsiniz. Ancak en kısa sürede konsolda bir

Uncaught TypeError: Property 'results' of object #<Object> is not a 
function 

hatası var. Ayrıca, öneriler görünmesine rağmen, bunlardan herhangi birini seçemiyorum. Ben denediğimde liste kaybolur. Yine de bu tamamen başka bir şey olabilir.

__response: function(content) { 
    var message; 
    this._superApply(arguments); 
    if (this.options.disabled || this.cancelSearch) { 
     return; 
    } 
    if (content && content.length) { 
     message = this.options.messages.results(content.length); 

Benim jquery şöyle görünür::

$("#FastCategory").autocomplete({ 
     source: function (request, response) { 
      $.ajax({ 
       url: "/Quiz/GetCategory", 
       type: "POST", 
       dataType: "json", 
       data: { term: request.term }, 
       success: function (data) { 
        console.log("data=",data); 
        response($.map(data, function (item) { 
         console.log("item=",item,item.Description); 
         return { label: item.Description, value: item.Description }; 
        })) 
       } 
      }) 
     }, 
     messages: { 
      noResults: "", results: "" 
     } 
    }); 

Benim kontrolör şöyle görünür:

jqueryUI1.9.2 kodunda hata konumu bu snippet'te son çizgidir

public JsonResult GetCategory(string term) 
{ 
    var result = (from r in db.QuizCategories 
        where r.Description.ToLower().Contains(term.ToLower()) 
        select new { r.Description }).Distinct(); 
    return Json(result, JsonRequestBehavior.AllowGet); 
} 

Nerede yanlış gittiğime dair bir fikrim var mı?

cevap

16

Narendra yanıtına bir yorumda bulunduğunuz gibi, sorun messages seçeneğidir. messages seçeneğinde, here cevap results mülkiyet olarak

jQuery(...).autocomplete({ 
    messages : { 
     noResults : '', 
     results : function(resultsCount) {} 
    } 
}); 
+0

Sadece mesajlar bölümünü yorumlayarak bu konuda çalışmıştım, ama siz haklısınız, teşekkürler. Bilmek güzel! – Joel

0

Bir değişkene atıfta bulunduğunuz ve bir işlevle aynı şekilde erişmeye çalıştığınız anlaşılıyor.

__response: function(content) { 
var message; 
this._superApply(arguments); 
if (this.options.disabled || this.cancelSearch) { 
    return; 
} 
if (content && content.length) { 
    message = this.options.messages.results=content; 

Yalnızca kodu değiştirerek içeriği oluşturun ve işe yarayacak.

+1

şey, evet, o kadarını ben hata mesajı biliyoruz bir işlev yerine bir dize olmalıdır. :) Göremediğim şey buna neden oluyor. Otomatik tamamlama çağrısının "iletileri:" bölümünü yorumlayarak hatayı giderebildim. Bunu daha iyi anlamak için onu okumalıyım. – Joel

İlgili konular