为什么我收到这个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类中断自动完成字段