Skip to content

Commit

Permalink
Autocomplete: Scope race condition handling to the instance. Fixes #9…
Browse files Browse the repository at this point in the history
…334 - Autocomplete: Multiple instances should be able to start asynchronous requests simultaneously.

(cherry picked from commit 9e00e00)
  • Loading branch information
scottgonzalez committed Nov 26, 2013
1 parent 2623836 commit e4a194c
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 16 deletions.
28 changes: 28 additions & 0 deletions tests/unit/autocomplete/autocomplete_core.js
Expand Up @@ -192,6 +192,34 @@ asyncTest( "handle race condition", function() {
}
});

asyncTest( "simultaneous searches (#9334)", function() {
expect( 2 );
var element = $( "#autocomplete" ).autocomplete({
source: function( request, response ) {
setTimeout(function() {
response([ request.term ]);
});
},
response: function() {
ok( true, "response from first instance" );
}
}),
element2 = $( "#autocomplete-textarea" ).autocomplete({
source: function( request, response ) {
setTimeout(function() {
response([ request.term ]);
});
},
response: function() {
ok( true, "response from second instance" );
start();
}
});

element.autocomplete( "search", "test" );
element2.autocomplete( "search", "test" );
});

test( "ARIA", function() {
expect( 7 );
var element = $( "#autocomplete" ).autocomplete({
Expand Down
29 changes: 13 additions & 16 deletions ui/jquery.ui.autocomplete.js
Expand Up @@ -41,6 +41,7 @@ $.widget( "ui.autocomplete", {
select: null
},

requestIndex: 0,
pending: 0,

_create: function() {
Expand Down Expand Up @@ -415,24 +416,20 @@ $.widget( "ui.autocomplete", {
this.source( { term: value }, this._response() );
},

_response: (function() {
var requestIndex = 0;
_response: function() {
var index = ++this.requestIndex;

return function() {
var index = ++requestIndex;

return $.proxy(function( content ) {
if ( index === requestIndex ) {
this.__response( content );
}
return $.proxy(function( content ) {
if ( index === this.requestIndex ) {
this.__response( content );
}

this.pending--;
if ( !this.pending ) {
this.element.removeClass( "ui-autocomplete-loading" );
}
}, this );
};
})(),
this.pending--;
if ( !this.pending ) {
this.element.removeClass( "ui-autocomplete-loading" );
}
}, this );
},

__response: function( content ) {
if ( content ) {
Expand Down

0 comments on commit e4a194c

Please sign in to comment.