JqueryUI 自动完成错误:未捕获的 TypeError:对象#<Object> 的属性“结果”不是函数

Posted

技术标签:

【中文标题】JqueryUI 自动完成错误:未捕获的 TypeError:对象#<Object> 的属性“结果”不是函数【英文标题】:JqueryUI autocomplete error: Uncaught TypeError: Property 'results' of object #<Object> is not a function 【发布时间】:2013-12-11 03:20:27 【问题描述】:

我环顾四周,找不到问题的答案。我没有太多使用 jquery UI,但我正在尝试使用此博客条目 jQuery UI Autocomplete with JSON in MVC 4 作为指南来实现自动完成,因为它实际上与我需要的相同。我可能遗漏了一些“明显”的东西,因为我还不了解自动完成语法的所有部分。

问题:我可以让下拉建议出现。但是一旦它发生,我就会得到一个

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

控制台出错。 此外,尽管出现了建议,但我无法选择其中任何一个。我一尝试,列表就会消失。尽管那可能完全是另一回事。

jqueryUI1.9.2代码中错误的位置是这个sn -p的最后一行:

__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 );

我的 jquery 看起来像这样:

    $("#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: ""
        
    );

我的控制器如下所示:

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);

知道我哪里出错了吗?

【问题讨论】:

【参考方案1】:

似乎您指的是一个变量并试图访问它作为一个函数。

__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;

只需更改将内容分配给结果的代码即可。

【讨论】:

嗯,是的,我从错误消息中知道了这么多。 :) 我没有看到是什么导致了它。通过注释掉自动完成调用的“消息:”部分,我能够使错误消失。我将不得不阅读它以更好地理解它。【参考方案2】:

正如您在对 Narendra 答案的评论中指出的那样,问题出在 messages 选项上。正如回答here,results 属性,在messages 选项中,必须是函数而不是字符串

jQuery(...).autocomplete(
    messages : 
        noResults : '',
        results : function(resultsCount) 
    
);

【讨论】:

我通过简单地注释掉消息部分来解决这个问题,但你是对的,所以谢谢。很高兴知道!

以上是关于JqueryUI 自动完成错误:未捕获的 TypeError:对象#<Object> 的属性“结果”不是函数的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误 - 自动完成不是 ASP.Net 中的功能 [重复]

JQueryUI 自动完成结果未显示,但出现在 DevTools 中

JQuery UI'可拖动不是函数'未捕获的TypeError

jQueryUI 自动完成 - 当没有结果返回时

无法使用 HTML 设置未定义的 jQuery UI 自动完成的属性“_renderItem”

JqueryUI 自动完成输入字段