diff --git a/js/src/dropdown.js b/js/src/dropdown.js index 2f69298540..64d6b37176 100644 --- a/js/src/dropdown.js +++ b/js/src/dropdown.js @@ -57,7 +57,7 @@ const Dropdown = (($) => { FORM_CHILD : '.dropdown form', MENU : '.dropdown-menu', NAVBAR_NAV : '.navbar-nav', - VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled)' + VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' } const AttachmentMap = { diff --git a/js/tests/unit/dropdown.js b/js/tests/unit/dropdown.js index 3040e81b41..0e3d370413 100644 --- a/js/tests/unit/dropdown.js +++ b/js/tests/unit/dropdown.js @@ -544,39 +544,6 @@ $(function () { $dropdown.trigger('click') }) - QUnit.test('should skip disabled element when using keyboard navigation', function (assert) { - assert.expect(2) - var done = assert.async() - var dropdownHTML = '
' + - '' + - '
' - var $dropdown = $(dropdownHTML) - .appendTo('#qunit-fixture') - .find('[data-toggle="dropdown"]') - .bootstrapDropdown() - - $dropdown - .parent('.dropdown') - .on('shown.bs.dropdown', function () { - assert.ok(true, 'shown was fired') - $dropdown.trigger($.Event('keydown', { - which: 40 - })) - $dropdown.trigger($.Event('keydown', { - which: 40 - })) - assert.ok(!$(document.activeElement).is('.disabled'), '.disabled is not focused') - done() - }) - $dropdown.trigger('click') - }) - QUnit.test('should focus next/previous element when using keyboard navigation', function (assert) { assert.expect(4) var done = assert.async() @@ -617,6 +584,41 @@ $(function () { $dropdown.trigger('click') }) + QUnit.test('should skip disabled element when using keyboard navigation', function (assert) { + assert.expect(3) + var done = assert.async() + var dropdownHTML = '
' + + '' + + '
' + var $dropdown = $(dropdownHTML) + .appendTo('#qunit-fixture') + .find('[data-toggle="dropdown"]') + .bootstrapDropdown() + + $dropdown + .parent('.dropdown') + .on('shown.bs.dropdown', function () { + assert.ok(true, 'shown was fired') + $dropdown.trigger($.Event('keydown', { + which: 40 + })) + assert.ok($(document.activeElement).is($('#item1')), '#item1 is focused') + $dropdown.trigger($.Event('keydown', { + which: 40 + })) + assert.ok($(document.activeElement).is($('#item1')), '#item1 is still focused') + done() + }) + $dropdown.trigger('click') + }) + QUnit.test('should not close the dropdown if the user clicks on a text field', function (assert) { assert.expect(2) var done = assert.async()