Skip to main content

Search and Top Navigation

#8852 closed bug (notabug)

Opened November 26, 2012 02:18AM UTC

Closed November 26, 2012 02:28AM UTC

autocomplete doesn't work on 2nd match to jquery selector

Reported by: mdeanda Owned by: mdeanda
Priority: minor Milestone: 1.10.0
Component: ui.autocomplete Version: 1.9.2
Keywords: Cc:
Blocked by: Blocking:
Description

i'm using autocomplete on a search form that is displayed on the header and footer of my page and i use a single select to add autocomplete to it. i had to wrap the $().ac code in an $().each(...) call to fix. here is my working code sample:

	$('.contentSearchForm .searchField').each(function(index, el) {
		var ac = $(el).autocomplete({
			source: function(request, response) {
				RequestManager.send("Content.search", {query:request.term}, function(data) {
					var a = [];
					for (var i=0; i<data.items.length; i++) {
						a.push(data.items[i]);
					}
					response(a);
				});
			},
			focus: function(event, ui) {
				//don't render focus
				return false;
			},
			select: function(event, ui) {
				window.location.href = "/content/View?id=" + ui.item.id;
				return false;
			}
		}).data("autocomplete");
		if (ac) {
			ac._renderItem = function( ul, item ) {
				return $( "<li class=\\"ui-ac-content\\">" )
					.data( "item.autocomplete", item )
					.append( '<a><div class="topic">'
						+ item.topic + '</div><div class="title">'
						+ item.title + '</div><div class="clearboth"></div></a>' )
					.appendTo( ul );
			};
		}
	});

the issue i had was that the rendering was a bunch of empty tiny (8px?) lines with no text. there's a chance its actually related to the ._renderItem portion. maybe making this a parameter to the autocomplete call would have fixed this.

also notice the "if (ac)..." portion. if the selector matched 0 items, it would fail there. i basically modified some code from the example page.

Attachments (0)
Change History (2)

Changed November 26, 2012 02:21AM UTC by tj.vantoll comment:1

owner: → mdeanda
status: newpending

Hi mdeanda. Thanks for taking the time to contribute to the jQuery UI project! We're going to need a reduced test case on a site like jsFiddle to help us assess your ticket.

You can substitute a hardcoded array instead of the

source
function you're currently using to test this.

Please be sure to test against the git version of both jQuery UI and jQuery to ensure the issue still exists. To get you started, use this boilerplate: http://jsfiddle.net/ZgAqH/ Open the link and click to "Fork" (in the top menu) to get started.

Thanks.

Changed November 26, 2012 02:28AM UTC by scottgonzalez comment:2

resolution: → notabug
status: pendingclosed

This is not a bug. .data() is a getter and only works on a single element. Please use the forums or StackOverflow for help.

On a side note, it's invalid to put a div inside an anchor, and item.autocomplete is deprecated in favor of ui-autocomplete-item (you shouldn't even be setting the data in 1.9.x).