diff options
author | Scott González <scott.gonzalez@gmail.com> | 2014-08-05 14:19:06 -0400 |
---|---|---|
committer | Scott González <scott.gonzalez@gmail.com> | 2014-08-06 15:01:58 -0400 |
commit | 32bef7ad4ea120fb32a79e1ea49bd9b846bcf835 (patch) | |
tree | bd012672cc38ac7f164d3221e8cb19391a57b580 | |
parent | d157b669b7b5d3208a2369c4ed9d0b159bb63d74 (diff) | |
download | jquery-ui-32bef7ad4ea120fb32a79e1ea49bd9b846bcf835.tar.gz jquery-ui-32bef7ad4ea120fb32a79e1ea49bd9b846bcf835.zip |
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
-rw-r--r-- | tests/unit/tooltip/tooltip_core.js | 20 | ||||
-rw-r--r-- | ui/tooltip.js | 9 |
2 files changed, 28 insertions, 1 deletions
diff --git a/tests/unit/tooltip/tooltip_core.js b/tests/unit/tooltip/tooltip_core.js index 710444b44..760ffeed2 100644 --- a/tests/unit/tooltip/tooltip_core.js +++ b/tests/unit/tooltip/tooltip_core.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 ) ); diff --git a/ui/tooltip.js b/ui/tooltip.js index 52be04dcb..048b6324a 100644 --- a/ui/tooltip.js +++ b/ui/tooltip.js @@ -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 ) { |