aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/unit/autocomplete/autocomplete_core.js28
-rw-r--r--ui/jquery.ui.autocomplete.js29
2 files changed, 41 insertions, 16 deletions
diff --git a/tests/unit/autocomplete/autocomplete_core.js b/tests/unit/autocomplete/autocomplete_core.js
index df98725ee..03ebdfec9 100644
--- a/tests/unit/autocomplete/autocomplete_core.js
+++ b/tests/unit/autocomplete/autocomplete_core.js
@@ -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({
diff --git a/ui/jquery.ui.autocomplete.js b/ui/jquery.ui.autocomplete.js
index 6a3e8661d..8328cb6e5 100644
--- a/ui/jquery.ui.autocomplete.js
+++ b/ui/jquery.ui.autocomplete.js
@@ -41,6 +41,7 @@ $.widget( "ui.autocomplete", {
select: null
},
+ requestIndex: 0,
pending: 0,
_create: function() {
@@ -414,24 +415,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 ) {