mirror of
https://github.com/jquery/jquery-ui.git
synced 2025-01-07 20:34:24 +00:00
Tooltip: Handle synthetic focusin events. Fixes #8740 - Tooltip: Does not hide consistently with dynamically loaded content.
This commit is contained in:
parent
eca5abd873
commit
1b503a237e
@ -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 ) );
|
||||
|
11
ui/jquery.ui.tooltip.js
vendored
11
ui/jquery.ui.tooltip.js
vendored
@ -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 );
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user