]> source.dussan.org Git - jquery-ui.git/commitdiff
Backport of f9996682b5739661c21548f0de3d4c4883c5119d for 1-8-stable. 415/head
authorAndreas Pelme <andreas@pelme.se>
Tue, 2 Aug 2011 16:40:25 +0000 (18:40 +0200)
committerAndreas Pelme <andreas@pelme.se>
Tue, 2 Aug 2011 16:40:25 +0000 (18:40 +0200)
Original commit message from f9996682b5739661c21548f0de3d4c4883c5119d:
Dialog: Before handling escape key presses, check if the default action has been prevented. Fixes #6966 - Pressing ESC on dialog when 2 dialogs are open closes both dialogs.

tests/unit/dialog/dialog_tickets.js
ui/jquery.ui.dialog.js

index b9bf2f972acac59f79572c1b045167b1aeff35be..def2452dedfc5bfb30915b57f55d7626d6847e61 100644 (file)
@@ -88,4 +88,29 @@ test("#6645: Missing element not found check in overlay", function(){
     d1.add(d2).remove();
 });
 
+test("#6966: Escape key closes all dialogs, not the top one", function(){
+       expect(8);
+    // test with close function removing dialog
+    d1 = $('<div title="dialog 1">Dialog 1</div>').dialog({modal: true});
+    d2 = $('<div title="dialog 2">Dialog 2</div>').dialog({modal: true, close: function(){ d2.remove()}});
+    ok(d1.dialog("isOpen"), 'first dialog is open');
+    ok(d2.dialog("isOpen"), 'second dialog is open');
+    d2.simulate("keydown", {keyCode: $.ui.keyCode.ESCAPE});
+    ok(d1.dialog("isOpen"), 'first dialog still open');
+    ok(!d2.data('dialog'), 'second dialog is closed');
+    d2.remove();
+    d1.remove();
+
+    // test without close function removing dialog
+    d1 = $('<div title="dialog 1">Dialog 1</div>').dialog({modal: true});
+    d2 = $('<div title="dialog 2">Dialog 2</div>').dialog({modal: true});
+    ok(d1.dialog("isOpen"), 'first dialog is open');
+    ok(d2.dialog("isOpen"), 'second dialog is open');
+    d2.simulate("keydown", {keyCode: $.ui.keyCode.ESCAPE});
+    ok(d1.dialog("isOpen"), 'first dialog still open');
+    ok(!d2.dialog("isOpen"), 'second dialog is closed');
+    d2.remove();
+    d1.remove();
+});
+
 })(jQuery);
index af08e1b76b73f3ada84aaf2c5c883e12637ae75d..32846d3fd73f8f79380af1429a5de711ce96f326 100644 (file)
@@ -110,7 +110,7 @@ $.widget("ui.dialog", {
                                // setting tabIndex makes the div focusable
                                // setting outline to 0 prevents a border on focus in Mozilla
                                .attr('tabIndex', -1).css('outline', 0).keydown(function(event) {
-                                       if (options.closeOnEscape && event.keyCode &&
+                                       if (options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
                                                event.keyCode === $.ui.keyCode.ESCAPE) {
                                                
                                                self.close(event);
@@ -748,7 +748,7 @@ $.extend($.ui.dialog.overlay, {
 
                        // allow closing by pressing the escape key
                        $(document).bind('keydown.dialog-overlay', function(event) {
-                               if (dialog.options.closeOnEscape && event.keyCode &&
+                               if (dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
                                        event.keyCode === $.ui.keyCode.ESCAPE) {
                                        
                                        dialog.close(event);