Skip to content
Permalink
Browse files

Autocomplete: Handle clicks outside the autocomplete after scrolling …

…the results (which causes the body to gain focus). Fixes #5903 - Autocomplete doesn't close after scrolling.
  • Loading branch information
scottgonzalez committed Aug 5, 2010
1 parent ed07f0a commit de266a1275efa405eb7147469fa25274a6b7254b
Showing with 18 additions and 1 deletion.
  1. +18 −1 ui/jquery.ui.autocomplete.js
@@ -119,7 +119,24 @@ $.widget( "ui.autocomplete", {
.addClass( "ui-autocomplete" )
.appendTo( $( this.options.appendTo || "body", doc )[0] )
// prevent the close-on-blur in case of a "slow" click on the menu (long mousedown)
.mousedown(function() {
.mousedown(function( event ) {
// clicking on the scrollbar causes focus to shift to the body
// but we can't detect a mouseup or a click immediately afterward
// so we have to track the next mousedown and close the menu if
// the user clicks somewhere outside of the autocomplete
var menuElement = self.menu.element[ 0 ];
if ( event.target === menuElement ) {
setTimeout(function() {
$( document ).one( 'mousedown', function( event ) {
if ( event.target !== self.element[ 0 ] &&
event.target !== menuElement &&
!$.ui.contains( menuElement, event.target ) ) {
self.close();
}
});
}, 1 );
}

// use another timeout to make sure the blur-event-handler on the input was already triggered
setTimeout(function() {
clearTimeout( self.closing );

1 comment on commit de266a1

@jzaefferer

This comment has been minimized.

Copy link
Member

@jzaefferer jzaefferer commented on de266a1 Aug 5, 2010

What an endless source of joy!

Please sign in to comment.
You can’t perform that action at this time.