mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-11-21 11:04:24 +00:00
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.
This commit is contained in:
parent
ed07f0a056
commit
de266a1275
19
ui/jquery.ui.autocomplete.js
vendored
19
ui/jquery.ui.autocomplete.js
vendored
@ -119,7 +119,24 @@ $.widget( "ui.autocomplete", {
|
|||||||
.addClass( "ui-autocomplete" )
|
.addClass( "ui-autocomplete" )
|
||||||
.appendTo( $( this.options.appendTo || "body", doc )[0] )
|
.appendTo( $( this.options.appendTo || "body", doc )[0] )
|
||||||
// prevent the close-on-blur in case of a "slow" click on the menu (long mousedown)
|
// 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
|
// use another timeout to make sure the blur-event-handler on the input was already triggered
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
clearTimeout( self.closing );
|
clearTimeout( self.closing );
|
||||||
|
Loading…
Reference in New Issue
Block a user