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

我得到这个JS错误:

jquery-1.5.1.min.js:16Uncaught TypeError: Cannot set property '_renderItem' of undefined ddextend._Deferred.f.resolveWithjquery-1.5.1.min.js:16 ddextend.readyjquery-1.5.1.min.js:16 dcaddEventListener.A 

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

  .data( "autocomplete" )._renderItem = function( ul, item ) { return $( "
  • " ) .data( "item.autocomplete", item ) .append( "" + item.topic.name + "" ) .appendTo( ul ); };

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

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

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

    未定义,您不能设置undefined属性。 尝试:

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

    当我将jquery ui从旧版升级到1.10.0时,这个问题在我看来

    只是改变

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

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

    源JQueryUI 1.10.0自动完成renderItem问题

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

    像这样的东西:

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

    我认为.data("autocomplete")没有返回一个对象,因为错误说:

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

    如果你这样做:

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

    你尝试分解它:

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

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


    实际上,这个问题似乎解释了一个与你的问题非常相似的问题: 使用_renderItem类中断自动完成字段