diff options
| author | Heinrich Fenkart <[email protected]> | 2014-11-12 02:23:34 +0100 |
|---|---|---|
| committer | Heinrich Fenkart <[email protected]> | 2014-11-12 02:23:34 +0100 |
| commit | 001d5e00c58bbb8e4d34c085c5b27b214a475bd5 (patch) | |
| tree | cc142e8bb8c866aa3fc4d0d6adf6ae707cb7bd4e | |
| parent | 56f41561260651fc67fcbe7ce65f7aa7fc79788f (diff) | |
| parent | 1d55ada581e2e669cc7c163dc469b9184bbd8f7d (diff) | |
| download | bootstrap-001d5e00c58bbb8e4d34c085c5b27b214a475bd5.tar.xz bootstrap-001d5e00c58bbb8e4d34c085c5b27b214a475bd5.zip | |
Merge pull request #15088 from twbs/dropdown-keydown-ignores
Dropdown: ignore keydown events coming from `input`s and `textarea`s
| -rw-r--r-- | js/dropdown.js | 2 | ||||
| -rw-r--r-- | js/tests/unit/dropdown.js | 41 |
2 files changed, 42 insertions, 1 deletions
diff --git a/js/dropdown.js b/js/dropdown.js index ae192e570..64ec34d5d 100644 --- a/js/dropdown.js +++ b/js/dropdown.js @@ -55,7 +55,7 @@ } Dropdown.prototype.keydown = function (e) { - if (!/(38|40|27|32)/.test(e.which)) return + if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return var $this = $(this) diff --git a/js/tests/unit/dropdown.js b/js/tests/unit/dropdown.js index 335795fde..3cdf637ee 100644 --- a/js/tests/unit/dropdown.js +++ b/js/tests/unit/dropdown.js @@ -224,4 +224,45 @@ $(function () { $(document.body).click() }) + test('should ignore keyboard events within <input>s and <textarea>s', function () { + stop() + + var dropdownHTML = '<ul class="tabs">' + + '<li class="dropdown">' + + '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' + + '<ul class="dropdown-menu" role="menu">' + + '<li><a href="#">Secondary link</a></li>' + + '<li><a href="#">Something else here</a></li>' + + '<li class="divider"/>' + + '<li><a href="#">Another link</a></li>' + + '<li><input type="text" id="input"></li>' + + '<li><textarea id="textarea"/></li>' + + '</ul>' + + '</li>' + + '</ul>' + var $dropdown = $(dropdownHTML) + .appendTo('#qunit-fixture') + .find('[data-toggle="dropdown"]') + .bootstrapDropdown() + + var $input = $('#input') + var $textarea = $('#textarea') + + $dropdown + .parent('.dropdown') + .on('shown.bs.dropdown', function () { + ok(true, 'shown was fired') + + $input.focus().trigger($.Event('keydown', { which: 38 })) + ok($(document.activeElement).is($input), 'input still focused') + + $textarea.focus().trigger($.Event('keydown', { which: 38 })) + ok($(document.activeElement).is($textarea), 'textarea still focused') + + start() + }) + + $dropdown.click() + }) + }) |
