Permalink
Browse files

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
  • Loading branch information...
scottgonzalez committed Aug 5, 2014
1 parent d157b66 commit 32bef7ad4ea120fb32a79e1ea49bd9b846bcf835
Showing with 28 additions and 1 deletion.
  1. +20 −0 tests/unit/tooltip/tooltip_core.js
  2. +8 −1 ui/tooltip.js
@@ -154,4 +154,24 @@ asyncTest( "programmatic focus with async content", function() {
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 ) );
View
@@ -296,6 +296,8 @@ return $.widget( "ui.tooltip", {
}, this.options.position ) );
}
+ this.hiding = false;
+ this.closing = false;
tooltip.hide();
this._show( tooltip, this.options.show );
@@ -362,9 +364,12 @@ return $.widget( "ui.tooltip", {
this._removeDescribedBy( target );
+ this.hiding = true;
tooltip.stop( true );
this._hide( tooltip, this.options.hide, function() {
that._removeTooltip( $( this ) );
+ this.hiding = false;
+ this.closing = false;
});
target.removeData( "ui-tooltip-open" );
@@ -385,7 +390,9 @@ return $.widget( "ui.tooltip", {
this.closing = true;
this._trigger( "close", event, { tooltip: tooltip } );
- this.closing = false;
+ if ( !this.hiding ) {
+ this.closing = false;
+ }
},
_tooltip: function( element ) {

0 comments on commit 32bef7a

Please sign in to comment.