diff options
author | Trey Hunner <treyhunner@gmail.com> | 2011-05-10 20:24:21 -0700 |
---|---|---|
committer | Trey Hunner <treyhunner@gmail.com> | 2011-05-15 12:50:26 -0700 |
commit | adb35572a9f9dad166b21632b79aae65a505f630 (patch) | |
tree | c45d2bb7c430fd0e3c029460a5861f67a5d74e94 | |
parent | 85ac420a1e4281ee7f361e847d3cad72fa58525e (diff) | |
download | jquery-ui-adb35572a9f9dad166b21632b79aae65a505f630.tar.gz jquery-ui-adb35572a9f9dad166b21632b79aae65a505f630.zip |
Autocomplete: Trigger search timeout on all input events. Fixes #6666 - keyboard-autorepeat on Firefox and paste event
The input event triggers after all changes to an input field including
paste/cut events.
-rw-r--r-- | ui/jquery.ui.autocomplete.js | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/ui/jquery.ui.autocomplete.js b/ui/jquery.ui.autocomplete.js index b3d7598c1..4be4774d9 100644 --- a/ui/jquery.ui.autocomplete.js +++ b/ui/jquery.ui.autocomplete.js @@ -47,7 +47,8 @@ $.widget( "ui.autocomplete", { _create: function() { var self = this, doc = this.element[ 0 ].ownerDocument, - suppressKeyPress; + suppressKeyPress, + suppressInput; this.valueMethod = this.element[ this.element.is( "input" ) ? "val" : "text" ]; @@ -63,10 +64,12 @@ $.widget( "ui.autocomplete", { .bind( "keydown.autocomplete", function( event ) { if ( self.options.disabled || self.element.attr( "readonly" ) ) { suppressKeyPress = true; + suppressInput = true; return; } suppressKeyPress = false; + suppressInput = false; var keyCode = $.ui.keyCode; switch( event.keyCode ) { case keyCode.PAGE_UP: @@ -110,15 +113,8 @@ $.widget( "ui.autocomplete", { self.close( event ); break; default: - // keypress is triggered before the input value is changed - clearTimeout( self.searching ); - self.searching = setTimeout(function() { - // only search if the value has changed - if ( self.term != self._value() ) { - self.selectedItem = null; - self.search( null, event ); - } - }, self.options.delay ); + // search timeout should be triggered before the input value is changed + self._searchTimeout( event ); break; } }) @@ -150,6 +146,14 @@ $.widget( "ui.autocomplete", { break; } }) + .bind( "input.autocomplete", function(event) { + if ( suppressInput ) { + suppressInput = false; + event.preventDefault(); + return; + } + self._searchTimeout( event ); + }) .bind( "focus.autocomplete", function() { if ( self.options.disabled ) { return; @@ -317,6 +321,17 @@ $.widget( "ui.autocomplete", { } }, + _searchTimeout: function( event ) { + var self = this; + self.searching = setTimeout(function() { + // only search if the value has changed + if ( self.term != self.element.val() ) { + self.selectedItem = null; + self.search( null, event ); + } + }, self.options.delay ); + }, + search: function( value, event ) { value = value != null ? value : this._value(); |