]> source.dussan.org Git - jquery-ui.git/commitdiff
Dialog: Tabbing out of a modal dialog was possible because keypress doesn't fire...
authorCorey Frang <gnarf@gnarf.net>
Fri, 19 Aug 2011 11:03:59 +0000 (06:03 -0500)
committerCorey Frang <gnarf@gnarf.net>
Fri, 19 Aug 2011 11:03:59 +0000 (06:03 -0500)
tests/unit/dialog/dialog_tickets.js
ui/jquery.ui.dialog.js

index 1cfdcefea732b5d89cb31430e4b0653218754162..e65f939e02a05f1b928f2635e522ef932949ce29 100644 (file)
@@ -3,7 +3,36 @@
  */
 (function($) {
 
-module("dialog: tickets");
+module( "dialog: tickets" );
+
+asyncTest( "#3123: Prevent tabbing out of modal dialogs", function() {
+       expect( 3 );
+
+       var el = $( "<div><input id='t3123-first'><input id='t3123-last'></div>" ).dialog({ modal: true }),
+               inputs = el.find( "input" ),
+               widget = el.dialog( "widget" );
+
+       inputs.eq( 1 ).focus();
+       equal( document.activeElement, inputs[1], "Focus set on second input" );
+       inputs.eq( 1 ).simulate( "keyup", { keyCode: $.ui.keyCode.TAB });
+
+       setTimeout( checkTab, 2 );
+
+       function checkTab() {
+               ok( $.contains( widget, document.activeElement ), "Tab key event moved focus within the modal" );
+
+               // check shift tab
+               $( document.activeElement ).simulate( "keydown", { keyCode: $.ui.keyCode.TAB, shiftKey: true });
+               setTimeout( checkShiftTab, 2 );
+       }
+
+       function checkShiftTab() {
+               ok( $.contains( widget, document.activeElement ), "Shift-Tab key event moved focus within the modal" );
+
+               el.remove();
+               start();
+       }
+});
 
 test("#4826: setting resizable false toggles resizable on dialog", function() {
        expect(6);
index 493ed07e6763f4f34eb7fd43e658c6739b2828ae..e8107db7ccf50c75b58372841e4dbafd8faddb8d 100644 (file)
@@ -293,7 +293,7 @@ $.widget("ui.dialog", {
 
                // prevent tabbing out of modal dialogs
                if ( options.modal ) {
-                       uiDialog.bind( "keypress.ui-dialog", function( event ) {
+                       uiDialog.bind( "keyup.ui-dialog", function( event ) {
                                if ( event.keyCode !== $.ui.keyCode.TAB ) {
                                        return;
                                }