Dialog: Don't use ._on() for modal event handlers. Fixes #9048 - Dialog: broken focusin event handler when beforeclose event of a modal opens another modal.

This commit is contained in:
Scott González 2013-02-02 19:32:42 -05:00
parent 9c6b8f859a
commit 8724092e50
2 changed files with 22 additions and 11 deletions

View File

@ -147,4 +147,17 @@ asyncTest( "Prevent tabbing out of dialogs", function() {
});
});
asyncTest( "#9048: multiple modal dialogs opened and closed in different order", function() {
expect( 1 );
$( "#dialog1, #dialog2" ).dialog({ autoOpen: false, modal:true });
$( "#dialog1" ).dialog( "open" );
$( "#dialog2" ).dialog( "open" );
$( "#dialog1" ).dialog( "close" );
setTimeout(function() {
$( "#dialog2" ).dialog( "close" );
$( "#favorite-animal" ).focus();
ok( true, "event handlers cleaned up (no errors thrown)" );
start();
});
});
})(jQuery);

View File

@ -678,8 +678,7 @@ $.widget( "ui.dialog", {
this._delay(function() {
// Handle .dialog().dialog("close") (#4065)
if ( $.ui.dialog.overlayInstances ) {
this._on( this.document, {
focusin: function( event ) {
this.document.bind( "focusin.dialog", function( event ) {
if ( !$( event.target ).closest(".ui-dialog").length &&
// TODO: Remove hack when datepicker implements
// the .ui-front logic (#8989)
@ -688,7 +687,6 @@ $.widget( "ui.dialog", {
$(".ui-dialog:visible:last .ui-dialog-content")
.data("ui-dialog")._focusTabbable();
}
}
});
}
});
@ -712,7 +710,7 @@ $.widget( "ui.dialog", {
$.ui.dialog.overlayInstances--;
if ( !$.ui.dialog.overlayInstances ) {
this._off( this.document, "focusin" );
this.document.unbind( "focusin.dialog" );
}
this.overlay.remove();
this.overlay = null;