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()