Prevent autocomplete-menu from closing when clicking 'slowly', eg. a long mousedown. Fix for #5405 - Autocomplete: select event not triggered when mousedown duration > blur timeout

This commit is contained in:
jzaefferer 2010-05-18 14:57:02 +02:00
parent fcbf4c0872
commit fc093e9feb

View File

@ -96,7 +96,6 @@ $.widget( "ui.autocomplete", {
.bind( "blur.autocomplete", function( event ) { .bind( "blur.autocomplete", function( event ) {
clearTimeout( self.searching ); clearTimeout( self.searching );
// clicks on the menu (or a button to trigger a search) will cause a blur event // clicks on the menu (or a button to trigger a search) will cause a blur event
// TODO try to implement this without a timeout, see clearTimeout in search()
self.closing = setTimeout(function() { self.closing = setTimeout(function() {
self.close( event ); self.close( event );
self._change( event ); self._change( event );
@ -109,6 +108,13 @@ $.widget( "ui.autocomplete", {
this.menu = $( "<ul></ul>" ) this.menu = $( "<ul></ul>" )
.addClass( "ui-autocomplete" ) .addClass( "ui-autocomplete" )
.appendTo( "body", doc ) .appendTo( "body", doc )
// prevent the close-on-blur in case of a "slow" click on the menu (long mousedown)
.mousedown(function() {
// use another timeout to make sure the blur-event-handler on the input was already triggered
setTimeout(function() {
clearTimeout( self.closing );
}, 13);
})
.menu({ .menu({
focus: function( event, ui ) { focus: function( event, ui ) {
var item = ui.item.data( "item.autocomplete" ); var item = ui.item.data( "item.autocomplete" );