From 6b48ef5eca67f389d7a58f3c8a263ceb82c8becb Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=B6rn=20Zaefferer?= Date: Fri, 19 Oct 2012 18:16:11 -0400 Subject: [PATCH] Tooltip: Only bind blur when opening via focus, mouseleave for mouseover. Remove the keep-open-on-focusout workaround. Now matching behaviour described in ARIA Authoring Practices. Fixes #8699 - Moving focus on click of a tooltipped element shows native tooltip in IE/Firefox on Windows --- tests/visual/tooltip/tooltip.html | 7 +++++++ ui/jquery.ui.tooltip.js | 25 ++++++++++--------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/tests/visual/tooltip/tooltip.html b/tests/visual/tooltip/tooltip.html index 8f9b2e8df..97fa99bb9 100644 --- a/tests/visual/tooltip/tooltip.html +++ b/tests/visual/tooltip/tooltip.html @@ -90,6 +90,10 @@ offset: "0 -5" } }); + + $( "#blurs-on-click" ).tooltip().click(function() { + $( "#focus-on-me" ).focus(); + }); }); @@ -154,6 +158,9 @@ + + +

Play around with focusing and hovering of form elements.

diff --git a/ui/jquery.ui.tooltip.js b/ui/jquery.ui.tooltip.js index 73321633b..b56d939e8 100644 --- a/ui/jquery.ui.tooltip.js +++ b/ui/jquery.ui.tooltip.js @@ -206,7 +206,7 @@ $.widget( "ui.tooltip", { }, _open: function( event, target, content ) { - var tooltip, positionOption; + var tooltip, positionOption, events; if ( !content ) { return; } @@ -261,9 +261,7 @@ $.widget( "ui.tooltip", { this._trigger( "open", event, { tooltip: tooltip } ); - this._on( target, { - mouseleave: "close", - focusout: "close", + events = { keyup: function( event ) { if ( event.keyCode === $.ui.keyCode.ESCAPE ) { var fakeEvent = $.Event(event); @@ -271,7 +269,14 @@ $.widget( "ui.tooltip", { this.close( fakeEvent, true ); } } - }); + }; + if ( !event || event.type === "mouseover" ) { + events.mouseleave = "close"; + } + if ( !event || event.type === "focusin" ) { + events.focusout = "close"; + } + this._on( target, events ); }, close: function( event, force ) { @@ -285,16 +290,6 @@ $.widget( "ui.tooltip", { return; } - // don't close if the element has focus - // this prevents the tooltip from closing if you hover while focused - // - // we have to check the event type because tabbing out of the document - // may leave the element as the activeElement - if ( !force && event && event.type !== "focusout" && - this.document[0].activeElement === target[0] ) { - return; - } - // only set title if we had one before (see comment in _open()) if ( target.data( "ui-tooltip-title" ) ) { target.attr( "title", target.data( "ui-tooltip-title" ) ); -- 2.39.5