Skip to content
Browse files

Tooltip: Handle synthetic focusin events. Fixes #8740 - Tooltip: Does…

… not hide consistently with dynamically loaded content.

(cherry picked from commit 1b503a2)
  • Loading branch information...
1 parent 3175d7d commit f4ce4d309c6384ccda68065bbbee5a4404385503 @scottgonzalez scottgonzalez committed
Showing with 37 additions and 1 deletion.
  1. +27 −0 tests/unit/tooltip/tooltip_core.js
  2. +10 −1 ui/jquery.ui.tooltip.js
View
27 tests/unit/tooltip/tooltip_core.js
@@ -107,4 +107,31 @@ test( "tooltip on .ui-state-disabled element", function() {
equal( $( ".ui-tooltip" ).length, 0 );
});
+// http://bugs.jqueryui.com/ticket/8740
+asyncTest( "programmatic focus with async content", function() {
+ expect( 2 );
+ var element = $( "#tooltipped1" ).tooltip({
+ content: function( response ) {
+ setTimeout(function() {
+ response( "test" );
+ });
+ }
+ });
+
+ element.bind( "tooltipopen", function( event ) {
+ deepEqual( event.originalEvent.type, "focusin" );
+
+ element.bind( "tooltipclose", function( event ) {
+ deepEqual( event.originalEvent.type, "focusout" );
+ start();
+ });
+
+ setTimeout(function() {
+ element.blur();
+ });
+ });
+
+ element.focus();
+});
+
}( jQuery ) );
View
11 ui/jquery.ui.tooltip.js
@@ -188,7 +188,8 @@ $.widget( "ui.tooltip", {
_updateContent: function( target, event ) {
var content,
contentOption = this.options.content,
- that = this;
+ that = this,
+ eventType = event ? event.type : null;
if ( typeof contentOption === "string" ) {
return this._open( event, target, contentOption );
@@ -202,6 +203,14 @@ $.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
that._delay(function() {
+ // jQuery creates a special event for focusin when it doesn't
+ // exist natively. To improve performance, the native event
+ // object is reused and the type is changed. Therefore, we can't
+ // rely on the type being correct after the event finished
+ // bubbling, so we set it back to the previous value. (#8740)
+ if ( event ) {
+ event.type = eventType;
+ }
this._open( event, target, response );
});
});

0 comments on commit f4ce4d3

Please sign in to comment.
Something went wrong with that request. Please try again.