From 40e36371173ba2304623fac3ab81ee2d63187649 Mon Sep 17 00:00:00 2001 From: jzaefferer Date: Fri, 26 Mar 2010 12:40:46 -0400 Subject: Added $.ui.keyCode.ALT to complete list of metakeys, used in autocomplete --- ui/jquery.ui.autocomplete.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ui/jquery.ui.autocomplete.js') diff --git a/ui/jquery.ui.autocomplete.js b/ui/jquery.ui.autocomplete.js index 83a8cf7a4..eb07b4a4e 100644 --- a/ui/jquery.ui.autocomplete.js +++ b/ui/jquery.ui.autocomplete.js @@ -70,7 +70,7 @@ $.widget( "ui.autocomplete", { case keyCode.RIGHT: case keyCode.SHIFT: case keyCode.CONTROL: - case 18: + case keyCode.ALT: // ignore metakeys (shift, ctrl, alt) break; default: -- cgit v1.2.3 From 6d9caf1e230b7b9a4291a8e3525eefad2f08b6f8 Mon Sep 17 00:00:00 2001 From: jzaefferer Date: Fri, 26 Mar 2010 12:42:03 -0400 Subject: Autocomplete: Only remove classes actually added by the widget, ui-widget etc. aren't added, so don't remove them --- ui/jquery.ui.autocomplete.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ui/jquery.ui.autocomplete.js') diff --git a/ui/jquery.ui.autocomplete.js b/ui/jquery.ui.autocomplete.js index eb07b4a4e..a1d798c59 100644 --- a/ui/jquery.ui.autocomplete.js +++ b/ui/jquery.ui.autocomplete.js @@ -140,7 +140,7 @@ $.widget( "ui.autocomplete", { destroy: function() { this.element - .removeClass( "ui-autocomplete-input ui-widget ui-widget-content" ) + .removeClass( "ui-autocomplete-input" ) .removeAttr( "autocomplete" ) .removeAttr( "role" ) .removeAttr( "aria-autocomplete" ) -- cgit v1.2.3 From c01b3baef97808a3a7dfafaea084c03a27e92564 Mon Sep 17 00:00:00 2001 From: jzaefferer Date: Thu, 8 Apr 2010 12:05:52 +0200 Subject: Autocomplete: Track input changes and fire change-event on blur, along with selected item, if available. Fix for #5490 --- tests/unit/autocomplete/autocomplete_events.js | 25 +++++++++++++++++++++---- ui/jquery.ui.autocomplete.js | 11 +++++++++-- 2 files changed, 30 insertions(+), 6 deletions(-) (limited to 'ui/jquery.ui.autocomplete.js') diff --git a/tests/unit/autocomplete/autocomplete_events.js b/tests/unit/autocomplete/autocomplete_events.js index ccbe66c1b..28a72145e 100644 --- a/tests/unit/autocomplete/autocomplete_events.js +++ b/tests/unit/autocomplete/autocomplete_events.js @@ -12,7 +12,7 @@ module("autocomplete: events", { var data = ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby", "python", "c", "scala", "groovy", "haskell", "perl"]; test("all events", function() { - expect(11); + expect(12); var ac = $("#autocomplete").autocomplete({ delay: 0, source: data, @@ -34,21 +34,38 @@ test("all events", function() { same(event.type, "autocompleteselect"); same(ui.item, {label:"java", value:"java"}); }, - change: function(event) { + change: function(event, ui) { same(event.type, "autocompletechange"); + same(ui.item, {label:"java", value:"java"}); same( $(".ui-menu:visible").length, 0 ); + start(); } }); stop(); - ac.val("ja").keydown(); + ac.focus().val("ja").keydown(); setTimeout(function() { same( $(".ui-menu:visible").length, 1 ); ac.simulate("keydown", { keyCode: $.ui.keyCode.DOWN }); ac.simulate("keydown", { keyCode: $.ui.keyCode.ENTER }); - start(); + ac.blur(); }, 50); }); +test("change without selection", function() { + expect(2); + stop(); + var ac = $("#autocomplete").autocomplete({ + delay: 0, + source: data, + change: function(event, ui) { + same(event.type, "autocompletechange"); + same(ui.item, null); + start(); + } + }); + ac.focus().val("ja").blur(); +}); + test("cancel search", function() { expect(6); var first = true; diff --git a/ui/jquery.ui.autocomplete.js b/ui/jquery.ui.autocomplete.js index a1d798c59..14a19e4b2 100644 --- a/ui/jquery.ui.autocomplete.js +++ b/ui/jquery.ui.autocomplete.js @@ -83,6 +83,7 @@ $.widget( "ui.autocomplete", { } }) .bind( "focus.autocomplete", function() { + self.selectedItem = null; self.previous = self.element.val(); }) .bind( "blur.autocomplete", function( event ) { @@ -91,6 +92,7 @@ $.widget( "ui.autocomplete", { // TODO try to implement this without a timeout, see clearTimeout in search() self.closing = setTimeout(function() { self.close( event ); + self._change( event ); }, 150 ); }); this._initSource(); @@ -116,11 +118,13 @@ $.widget( "ui.autocomplete", { self.element.val( item.value ); } self.close( event ); - self.previous = self.element.val(); // only trigger when focus was lost (click on menu) + var previous = self.previous; if ( self.element[0] !== doc.activeElement ) { self.element.focus(); + self.previous = previous; } + self.selectedItem = item; }, blur: function( event, ui ) { if ( self.menu.element.is(":visible") ) { @@ -219,8 +223,11 @@ $.widget( "ui.autocomplete", { this.menu.element.hide(); this.menu.deactivate(); } + }, + + _change: function( event ) { if ( this.previous !== this.element.val() ) { - this._trigger( "change", event ); + this._trigger( "change", event, { item: this.selectedItem } ); } }, -- cgit v1.2.3 From dbc9addfae0c9a2aee2d4a1833b2b1d3ba83f8de Mon Sep 17 00:00:00 2001 From: jzaefferer Date: Fri, 16 Apr 2010 11:05:35 +0200 Subject: Autocomplete: Refactored code for array filtering into $.ui.autocomplete.filter, used by remote-with-cache and modified multiple-demo (now with local data); added multiple-remote to also show multiple with remote data --- demos/autocomplete/index.html | 1 + demos/autocomplete/multiple-remote.html | 75 +++++++++++++++++++++++++++++++ demos/autocomplete/multiple.html | 22 ++++----- demos/autocomplete/remote-with-cache.html | 7 ++- ui/jquery.ui.autocomplete.js | 12 ++--- 5 files changed, 94 insertions(+), 23 deletions(-) create mode 100644 demos/autocomplete/multiple-remote.html (limited to 'ui/jquery.ui.autocomplete.js') diff --git a/demos/autocomplete/index.html b/demos/autocomplete/index.html index 0c92d19b4..c7b720784 100644 --- a/demos/autocomplete/index.html +++ b/demos/autocomplete/index.html @@ -18,6 +18,7 @@
  • XML data parsed once
  • Categories
  • Multiple values
  • +
  • Multiple, remote
  • diff --git a/demos/autocomplete/multiple-remote.html b/demos/autocomplete/multiple-remote.html new file mode 100644 index 000000000..5e0f4b50b --- /dev/null +++ b/demos/autocomplete/multiple-remote.html @@ -0,0 +1,75 @@ + + + + + jQuery UI Autocomplete multiple demo + + + + + + + + + + + +
    + +
    + + +
    + +
    + +
    +

    +Usage: Enter at least two characters to get bird name suggestions. Select a value to continue adding more names. +

    +

    +This is an example showing how to use the source-option along with some events to enable autocompleting multiple values into a single field. +

    +
    + + + diff --git a/demos/autocomplete/multiple.html b/demos/autocomplete/multiple.html index 5e0f4b50b..908cfe6ce 100644 --- a/demos/autocomplete/multiple.html +++ b/demos/autocomplete/multiple.html @@ -12,6 +12,7 @@