Skip to content
Permalink
Browse files

Tooltip: Only bind blur when opening via focus, mouseleave for mouseo…

…ver. 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
  • Loading branch information...
jzaefferer committed Oct 19, 2012
1 parent 77a55f1 commit 6b48ef5eca67f389d7a58f3c8a263ceb82c8becb
Showing with 17 additions and 15 deletions.
  1. +7 −0 tests/visual/tooltip/tooltip.html
  2. +10 −15 ui/jquery.ui.tooltip.js
@@ -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>
@@ -206,7 +206,7 @@ $.widget( "ui.tooltip", {
},

_open: function( event, target, content ) {
var tooltip, positionOption;
var tooltip, positionOption, events;
if ( !content ) {
return;
}
@@ -261,17 +261,22 @@ $.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);
fakeEvent.currentTarget = target[0];
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" ) );

0 comments on commit 6b48ef5

Please sign in to comment.
You can’t perform that action at this time.