Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot set property '_renderItem' of undefined jQuery UI autocomplete with HTML

I'm using the following code to render my jQuery UI autocomplete items as HTML. The items render correctly in the autocomplete control, but I keep getting this javascript error and can't move past it.

Firefox Could not convert JavaScript argument

Chrome Cannot set property '_renderItem' of undefined

  donor.GetFriends(function (response) {     // setup message to friends search autocomplete     all_friends = [];     if (response) {         for (var i = 0; i < response.all.length - 1; i++) {                                 all_friends.push({                     "label":"<img style='padding-top: 5px; width: 46px; height: 46px;' src='/uploads/profile-pictures/" +                         response.all[i].image + "'/><br/><strong style='margin-left: 55px; margin-top: -40px; float:left;'>" +                         response.all[i].firstname + " " + response.all[i].lastname + "</strong>",                      "value":response.all[i].firstname + " " + response.all[i].lastname,                     "id":response.all[i].user_id});             }         }              $('#msg-to').autocomplete({         source:all_friends,         select:function (event, ui) {                            // set the id of the user to send a message to             mail_message_to_id = ui.item.id;         }      }).data("autocomplete")._renderItem = function (ul, item) {         return $("<li></li>")             .data("item.autocomplete", item)             .append($("<a></a>").html(item.label))             .appendTo(ul);     }; }); 

Not sure why it is throwing this error, or what I have to do to get past it...Any help is appreciated.

like image 531
Carl Weis Avatar asked Mar 01 '12 08:03

Carl Weis


1 Answers

Since I just joined and can't comment on drcforbin's post above, I guess I have to add my own answer.

drcforbin is correct, although it is really a different problem than the one that the OP had. Anyone coming to this thread now is probably facing this issue due to the new version of jQuery UI just released. Certain naming conventions relating to autocomplete were deprecated in jQuery UI in v1.9 and have been completely removed in v1.10 (see http://jqueryui.com/upgrade-guide/1.10/#autocomplete).

What is confusing, however, is that they only mention the transition from the item.autocomplete data tag to ui-autocomplete-item, but the autocomplete data tag has also been renamed to ui-autocomplete. And it's even more confusing because the demos are still using the old syntax (and thus are broken).

The following is what needs to change in the _renderItem function for jQuery UI 1.10.0 in the Custom Data demo here: http://jqueryui.com/autocomplete/#custom-data

Original code:

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

Fixed code:

.data( "ui-autocomplete" )._renderItem = function( ul, item ) {   return $( "<li>" )     .data( "ui-autocomplete-item", item )     .append( "<a>" + item.label + "<br>" + item.desc + "</a>" )     .appendTo( ul ); }; 

Note the changes for both autocomplete and item.autocomplete. I've verified that this works in my own projects.

like image 67
nextgentech Avatar answered Oct 02 '22 00:10

nextgentech