diff options
author | Jörn Zaefferer <joern.zaefferer@gmail.com> | 2012-10-19 18:16:11 -0400 |
---|---|---|
committer | Jörn Zaefferer <joern.zaefferer@gmail.com> | 2012-10-21 12:50:12 -0400 |
commit | 6b48ef5eca67f389d7a58f3c8a263ceb82c8becb (patch) | |
tree | 799e6d484e16c82a21962dd1bf71ec7ed58baabd | |
parent | 77a55f1291861b87d30011ac5fd948f6b38d2c60 (diff) | |
download | jquery-ui-6b48ef5eca67f389d7a58f3c8a263ceb82c8becb.tar.gz jquery-ui-6b48ef5eca67f389d7a58f3c8a263ceb82c8becb.zip |
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
-rw-r--r-- | tests/visual/tooltip/tooltip.html | 7 | ||||
-rw-r--r-- | 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(); + }); }); </script> </head> @@ -154,6 +158,9 @@ </div> </div> + <button id="blurs-on-click" title="button title text">click me to focus something else</button> + <input id="focus-on-me"> + <div class="group"> <p>Play around with focusing and hovering of form elements.</p> <form> 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" ) ); |