From dee7c8bd4493826e13b78b2d702947e6f4ad966e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Scott=20Gonz=C3=A1lez?= Date: Fri, 31 Aug 2012 15:38:21 -0400 Subject: [PATCH] Tooltip: Update open tooltips if the content option changes. Fixes #8544 - Unable to update tooltip content dynamically. --- tests/unit/tooltip/tooltip_options.js | 19 ++++++++++++++++++ ui/jquery.ui.tooltip.js | 28 ++++++++++++++++++++------- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/tests/unit/tooltip/tooltip_options.js b/tests/unit/tooltip/tooltip_options.js index 771da6da7..561f3ffe5 100644 --- a/tests/unit/tooltip/tooltip_options.js +++ b/tests/unit/tooltip/tooltip_options.js @@ -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, diff --git a/ui/jquery.ui.tooltip.js b/ui/jquery.ui.tooltip.js index 9f0a8a810..f94d9715c 100644 --- a/ui/jquery.ui.tooltip.js +++ b/ui/jquery.ui.tooltip.js @@ -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 ); } }, -- 2.39.5