Skip to content
Permalink
Browse files

Dialog: Don't use ._on() for modal event handlers. Fixes #9048 - Dial…

…og: broken focusin event handler when beforeclose event of a modal opens another modal.
  • Loading branch information
scottgonzalez committed Feb 3, 2013
1 parent 9c6b8f8 commit 8724092e5070125e2610e8b0e6ee9ada126cf504
Showing with 22 additions and 11 deletions.
  1. +13 −0 tests/unit/dialog/dialog_core.js
  2. +9 −11 ui/jquery.ui.dialog.js
@@ -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);
@@ -678,16 +678,14 @@ $.widget( "ui.dialog", {
this._delay(function() {
// Handle .dialog().dialog("close") (#4065)
if ( $.ui.dialog.overlayInstances ) {
this._on( this.document, {
focusin: function( event ) {
if ( !$( event.target ).closest(".ui-dialog").length &&
// TODO: Remove hack when datepicker implements
// the .ui-front logic (#8989)
!$( event.target ).closest(".ui-datepicker").length ) {
event.preventDefault();
$(".ui-dialog:visible:last .ui-dialog-content")
.data("ui-dialog")._focusTabbable();
}
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)
!$( event.target ).closest(".ui-datepicker").length ) {
event.preventDefault();
$(".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;

0 comments on commit 8724092

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