Tooltip: Treat the tooltip as closing until it's fully removed

This ensures that we don't trigger the close event twice if the tooltip is
destroyed during the hide animation.

Closes gh-1306
This commit is contained in:
Scott González 2014-08-05 14:19:06 -04:00
parent d157b669b7
commit 32bef7ad4e
2 changed files with 28 additions and 1 deletions

View File

@ -154,4 +154,24 @@ asyncTest( "programmatic focus with async content", function() {
element.focus(); element.focus();
}); });
asyncTest( "destroy during hide animation; only one close event", function() {
expect( 1 );
var element = $( "#tooltipped1" ).tooltip({
show: false,
hide: true
});
element.bind( "tooltipclose", function() {
ok( true, "tooltip closed" );
});
element.tooltip( "open" );
element.tooltip( "close" );
setTimeout(function() {
element.tooltip( "destroy" );
start();
});
});
}( jQuery ) ); }( jQuery ) );

View File

@ -296,6 +296,8 @@ return $.widget( "ui.tooltip", {
}, this.options.position ) ); }, this.options.position ) );
} }
this.hiding = false;
this.closing = false;
tooltip.hide(); tooltip.hide();
this._show( tooltip, this.options.show ); this._show( tooltip, this.options.show );
@ -362,9 +364,12 @@ return $.widget( "ui.tooltip", {
this._removeDescribedBy( target ); this._removeDescribedBy( target );
this.hiding = true;
tooltip.stop( true ); tooltip.stop( true );
this._hide( tooltip, this.options.hide, function() { this._hide( tooltip, this.options.hide, function() {
that._removeTooltip( $( this ) ); that._removeTooltip( $( this ) );
this.hiding = false;
this.closing = false;
}); });
target.removeData( "ui-tooltip-open" ); target.removeData( "ui-tooltip-open" );
@ -385,7 +390,9 @@ return $.widget( "ui.tooltip", {
this.closing = true; this.closing = true;
this._trigger( "close", event, { tooltip: tooltip } ); this._trigger( "close", event, { tooltip: tooltip } );
this.closing = false; if ( !this.hiding ) {
this.closing = false;
}
}, },
_tooltip: function( element ) { _tooltip: function( element ) {