Skip to content

Commit 4c57f36

Browse files
committed
Merge pull request jquery#415 from pelme/1-8-stable
Backport of #6966 fix (multiple dialogs and ESC)
2 parents 67ff57a + abf97f7 commit 4c57f36

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

tests/unit/dialog/dialog_tickets.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,29 @@ test("#6645: Missing element not found check in overlay", function(){
8888
d1.add(d2).remove();
8989
});
9090

91+
test("#6966: Escape key closes all dialogs, not the top one", function(){
92+
expect(8);
93+
// test with close function removing dialog
94+
d1 = $('<div title="dialog 1">Dialog 1</div>').dialog({modal: true});
95+
d2 = $('<div title="dialog 2">Dialog 2</div>').dialog({modal: true, close: function(){ d2.remove()}});
96+
ok(d1.dialog("isOpen"), 'first dialog is open');
97+
ok(d2.dialog("isOpen"), 'second dialog is open');
98+
d2.simulate("keydown", {keyCode: $.ui.keyCode.ESCAPE});
99+
ok(d1.dialog("isOpen"), 'first dialog still open');
100+
ok(!d2.data('dialog'), 'second dialog is closed');
101+
d2.remove();
102+
d1.remove();
103+
104+
// test without close function removing dialog
105+
d1 = $('<div title="dialog 1">Dialog 1</div>').dialog({modal: true});
106+
d2 = $('<div title="dialog 2">Dialog 2</div>').dialog({modal: true});
107+
ok(d1.dialog("isOpen"), 'first dialog is open');
108+
ok(d2.dialog("isOpen"), 'second dialog is open');
109+
d2.simulate("keydown", {keyCode: $.ui.keyCode.ESCAPE});
110+
ok(d1.dialog("isOpen"), 'first dialog still open');
111+
ok(!d2.dialog("isOpen"), 'second dialog is closed');
112+
d2.remove();
113+
d1.remove();
114+
});
115+
91116
})(jQuery);

ui/jquery.ui.dialog.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ $.widget("ui.dialog", {
110110
// setting tabIndex makes the div focusable
111111
// setting outline to 0 prevents a border on focus in Mozilla
112112
.attr('tabIndex', -1).css('outline', 0).keydown(function(event) {
113-
if (options.closeOnEscape && event.keyCode &&
113+
if (options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
114114
event.keyCode === $.ui.keyCode.ESCAPE) {
115115

116116
self.close(event);
@@ -748,7 +748,7 @@ $.extend($.ui.dialog.overlay, {
748748

749749
// allow closing by pressing the escape key
750750
$(document).bind('keydown.dialog-overlay', function(event) {
751-
if (dialog.options.closeOnEscape && event.keyCode &&
751+
if (dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
752752
event.keyCode === $.ui.keyCode.ESCAPE) {
753753

754754
dialog.close(event);

0 commit comments

Comments
 (0)