为什么我收到这个JS错误?

时间:2011-04-08 05:21:33

标签: javascript jquery debugging autocomplete

我得到了这个JS错误:

jquery-1.5.1.min.js:16Uncaught TypeError: Cannot set property '_renderItem' of undefined
d.d.extend._Deferred.f.resolveWithjquery-1.5.1.min.js:16
d.d.extend.readyjquery-1.5.1.min.js:16
d.c.addEventListener.A

它来自我的application.js文件中的jquery UI自动完成插件的代码:

    .data( "autocomplete" )._renderItem = function( ul, item ) {
         return $( "<li></li>" )
           .data( "item.autocomplete", item )
           .append( "<a>" + item.topic.name + "</a>" )
           .appendTo( ul );
            };

每当我加载一个没有自动完成代码所依据的文本字段的页面时,我都会收到此代码。为什么以及如何摆脱这个错误?

我想注意,虽然我收到此错误,但我的应用程序正常运行。我是否应该担心这个错误?

4 个答案:

答案 0 :(得分:10)

$(...).data('autocomplete')

未定义,您无法设置undefined属性。尝试:

var obj = $(...).data('autocomplete');
obj && (obj._renderItem = function(){
   ...
});

答案 1 :(得分:9)

当我将jquery ui从旧版本升级到1.10.0

时,这个问题出现了

只需更改

$('.foo').data("autocomplete")._render...;

$('.foo').data("uiAutocomplete")._render...;

JQueryUI 1.10.0 Autocompleter renderItem problems

答案 2 :(得分:3)

为什么不将自动完成代码包装在检查中以查看该元素是否存在?

类似的东西:

if ($'#myElementId').length) {
    $('#myElementId').data( "autocomplete" )._renderItem = function( ul, item ) {
         return $( "<li></li>" )
           .data( "item.autocomplete", item )
           .append( "<a>" + item.topic.name + "</a>" )
           .appendTo( ul );
    };
}

答案 3 :(得分:0)

我认为.data("autocomplete")没有返回一个对象,正如错误所示:

  

无法设置未定义的属性'_renderItem

如果你这样做:

$('.foo').data("autocomplete")._render...;

你试着分手:

$('.foo').data("autocomplete");
$('.foo')._renderItem = ...;

我从未遇到过_renderItem,所以我会更多地了解它。


实际上,这个问题似乎解释了一个与你的问题非常相似的问题:Using _renderItem kind of breaks autocomplete field