From: Jörn Zaefferer Date: Tue, 10 Jun 2014 11:51:25 +0000 (+0200) Subject: Dialog: Honor preventDefault when managing focus X-Git-Tag: 1.11.0~8 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=226cc3e9e57c7591ff6a2ee02ffed52ac97786a9;p=jquery-ui.git Dialog: Honor preventDefault when managing focus If event.isDefaultPrevented() is true, the focus management is completely skipped, assuming the user manages focus manually. Fixes #10103 Closes gh-1265 --- diff --git a/tests/unit/dialog/dialog_core.js b/tests/unit/dialog/dialog_core.js index c97f9585b..d72fef7b5 100644 --- a/tests/unit/dialog/dialog_core.js +++ b/tests/unit/dialog/dialog_core.js @@ -41,7 +41,7 @@ test("widget method", function() { }); asyncTest( "focus tabbable", function() { - expect( 6 ); + expect( 8 ); var element, options = { buttons: [{ @@ -118,7 +118,30 @@ asyncTest( "focus tabbable", function() { setTimeout(function() { equal( document.activeElement, element.parent()[ 0 ], "6. the dialog itself" ); element.remove(); - start(); + setTimeout( step7 ); + }); + } + + function step7() { + element = $( "
" ).dialog({ + open: function() { + var inputs = $( this ).find( "input" ); + inputs.last().keydown(function( event ) { + event.preventDefault(); + inputs.first().focus(); + }); + } + }); + setTimeout(function() { + var inputs = element.find( "input" ); + equal( document.activeElement, inputs[ 1 ], "Focus starts on second input" ); + inputs.last().simulate( "keydown", { keyCode: $.ui.keyCode.TAB }); + setTimeout(function() { + equal( document.activeElement, inputs[ 0 ], + "Honor preventDefault, allowing custom focus management" ); + element.remove(); + start(); + }, 50 ); }); } diff --git a/ui/dialog.js b/ui/dialog.js index 7998b042c..0ee94e4cf 100644 --- a/ui/dialog.js +++ b/ui/dialog.js @@ -334,7 +334,7 @@ return $.widget( "ui.dialog", { } // prevent tabbing out of dialogs - if ( event.keyCode !== $.ui.keyCode.TAB ) { + if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) { return; } var tabbables = this.uiDialog.find( ":tabbable" ),