我得到了这个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 );
};
每当我加载一个没有自动完成代码所依据的文本字段的页面时,我都会收到此代码。为什么以及如何摆脱这个错误?
我想注意,虽然我收到此错误,但我的应用程序正常运行。我是否应该担心这个错误?
答案 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...;
答案 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