diff options
Diffstat (limited to 'ui')
-rw-r--r-- | ui/tooltip.js | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/ui/tooltip.js b/ui/tooltip.js index 6a9039afe..9e4c3453e 100644 --- a/ui/tooltip.js +++ b/ui/tooltip.js @@ -199,6 +199,7 @@ return $.widget( "ui.tooltip", { }); } + this._registerCloseHandlers( event, target ); this._updateContent( target, event ); }, @@ -214,13 +215,16 @@ return $.widget( "ui.tooltip", { } content = contentOption.call( target[0], function( response ) { - // ignore async response if tooltip was closed already - if ( !target.data( "ui-tooltip-open" ) ) { - return; - } + // IE may instantly serve a cached response for ajax requests // delay this call to _open so the other call to _open runs first that._delay(function() { + + // Ignore async response if tooltip was closed already + if ( !target.data( "ui-tooltip-open" ) ) { + return; + } + // jQuery creates a special event for focusin when it doesn't // exist natively. To improve performance, the native event // object is reused and the type is changed. Therefore, we can't @@ -238,7 +242,7 @@ return $.widget( "ui.tooltip", { }, _open: function( event, target, content ) { - var tooltipData, tooltip, events, delayedShow, a11yContent, + var tooltipData, tooltip, delayedShow, a11yContent, positionOption = $.extend( {}, this.options.position ); if ( !content ) { @@ -316,8 +320,10 @@ return $.widget( "ui.tooltip", { } this._trigger( "open", event, { tooltip: tooltip } ); + }, - events = { + _registerCloseHandlers: function( event, target ) { + var events = { keyup: function( event ) { if ( event.keyCode === $.ui.keyCode.ESCAPE ) { var fakeEvent = $.Event(event); @@ -331,7 +337,7 @@ return $.widget( "ui.tooltip", { // tooltips will handle this in destroy. if ( target[ 0 ] !== this.element[ 0 ] ) { events.remove = function() { - this._removeTooltip( tooltip ); + this._removeTooltip( this._find( target ).tooltip ); }; } @@ -352,6 +358,12 @@ return $.widget( "ui.tooltip", { // The tooltip may already be closed if ( !tooltipData ) { + + // We set ui-tooltip-open immediately upon open (in open()), but only set the + // additional data once there's actually content to show (in _open()). So even if the + // tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in + // the period between open() and _open(). + target.removeData( "ui-tooltip-open" ); return; } |