]> source.dussan.org Git - jquery-ui.git/commitdiff
Tooltip: Update open tooltips if the content option changes. Fixes #8544 - Unable...
authorScott González <scott.gonzalez@gmail.com>
Fri, 31 Aug 2012 19:38:21 +0000 (15:38 -0400)
committerScott González <scott.gonzalez@gmail.com>
Fri, 31 Aug 2012 19:38:21 +0000 (15:38 -0400)
tests/unit/tooltip/tooltip_options.js
ui/jquery.ui.tooltip.js

index 771da6da7913da41effe6179e8b8bb002113769b..561f3ffe5b55d177415b79a741be292d943656f4 100644 (file)
@@ -46,6 +46,25 @@ asyncTest( "content: sync + async callback", function() {
        }).tooltip( "open" );
 });
 
+test( "content: change while open", function() {
+       expect( 2 ) ;
+       var element = $( "#tooltipped1" ).tooltip({
+               content: function() {
+                       return "old";
+               }
+       });
+
+       element.one( "tooltipopen", function( event, ui ) {
+               equal( ui.tooltip.text(), "old", "original content" );
+               element.tooltip( "option", "content", function() {
+                       return "new";
+               });
+               equal( ui.tooltip.text(), "new", "updated content" );
+       });
+
+       element.tooltip( "open" );
+});
+
 test( "items", function() {
        expect( 2 );
        var event,
index 9f0a8a8108af08659b0f6420487a03a6cad2d89e..f94d9715c7591d899474d714ce1525eedca8d72b 100644 (file)
@@ -73,13 +73,22 @@ $.widget( "ui.tooltip", {
        },
 
        _setOption: function( key, value ) {
+               var that = this;
+
                if ( key === "disabled" ) {
                        this[ value ? "_disable" : "_enable" ]();
                        this.options[ key ] = value;
                        // disable element style changes
                        return;
                }
+
                this._super( key, value );
+
+               if ( key === "content" ) {
+                       $.each( this.tooltips, function( id, element ) {
+                               that._updateContent( element );
+                       });
+               }
        },
 
        _disable: function() {
@@ -114,9 +123,7 @@ $.widget( "ui.tooltip", {
        },
 
        open: function( event ) {
-               var content,
-                       that = this,
-                       target = $( event ? event.target : this.element )
+               var target = $( event ? event.target : this.element )
                                .closest( this.options.items );
 
                // No element to show a tooltip for
@@ -140,6 +147,13 @@ $.widget( "ui.tooltip", {
 
                target.data( "tooltip-open", true );
 
+               this._updateContent( target, event );
+       },
+
+       _updateContent: function( target, event ) {
+               var content,
+                       that = this;
+
                content = this.options.content.call( target[0], function( response ) {
                        // ignore async response if tooltip was closed already
                        if ( !target.data( "tooltip-open" ) ) {
@@ -147,12 +161,12 @@ $.widget( "ui.tooltip", {
                        }
                        // IE may instantly serve a cached response for ajax requests
                        // delay this call to _open so the other call to _open runs first
-                       setTimeout(function() {
-                               that._open( event, target, response );
-                       }, 1 );
+                       that._delay(function() {
+                               this._open( event, target, response );
+                       });
                });
                if ( content ) {
-                       that._open( event, target, content );
+                       this._open( event, target, content );
                }
        },