]> source.dussan.org Git - jquery-ui.git/commitdiff
Tooltip: Better cleanup on destroy. Fixes #8627 - The Tooltip destroy method is not...
authorScott González <scott.gonzalez@gmail.com>
Fri, 5 Oct 2012 16:52:02 +0000 (12:52 -0400)
committerScott González <scott.gonzalez@gmail.com>
Fri, 5 Oct 2012 16:52:02 +0000 (12:52 -0400)
tests/unit/tooltip/tooltip_methods.js
ui/jquery.ui.tooltip.js

index 896e910c608cf15c39bcb869d0cb78af18934d84..c846d216cd43f6bae64da1762371ea801eaee441 100644 (file)
@@ -3,13 +3,20 @@
 module( "tooltip: methods" );
 
 test( "destroy", function() {
-       expect( 2 );
+       expect( 3 );
+       var element = $( "#tooltipped1" );
+
        domEqual( "#tooltipped1", function() {
-               $( "#tooltipped1" ).tooltip().tooltip( "destroy" );
+               element.tooltip().tooltip( "destroy" );
        });
 
        // make sure that open tooltips are removed on destroy
-       $( "#tooltipped1" ).tooltip().tooltip( "open" ).tooltip( "destroy" );
+       domEqual( "#tooltipped1", function() {
+               element
+                       .tooltip()
+                       .tooltip( "open", $.Event( "mouseover", { target: element[0] }) )
+                       .tooltip( "destroy" );
+       });
        equal( $( ".ui-tooltip" ).length, 0 );
 });
 
index 32aad6487533d3a0f60ad8e1b6639a9563709d98..980b43868e92b0d2503cb2345fa8413f2517b00f 100644 (file)
@@ -317,8 +317,24 @@ $.widget( "ui.tooltip", {
        },
 
        _destroy: function() {
-               $.each( this.tooltips, function( id ) {
+               var that = this;
+
+               // close open tooltips
+               $.each( this.tooltips, function( id, element ) {
+                       // Delegate to close method to handle common cleanup
+                       var event = $.Event( "blur" );
+                       event.target = event.currentTarget = element[0];
+                       that.close( event, true );
+
+                       // Remove immediately; destroying an open tooltip doesn't use the
+                       // hide animation
                        $( "#" + id ).remove();
+
+                       // Restore the title
+                       if ( element.data( "ui-tooltip-title" ) ) {
+                               element.attr( "title", element.data( "ui-tooltip-title" ) );
+                               element.removeData( "ui-tooltip-title" );
+                       }
                });
        }
 });