]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Dropdown: ignore keydown events coming from `input`s and `textarea`s 15088/head
authorHeinrich Fenkart <hnrch02@gmail.com>
Wed, 12 Nov 2014 00:18:06 +0000 (01:18 +0100)
committerHeinrich Fenkart <hnrch02@gmail.com>
Wed, 12 Nov 2014 01:01:25 +0000 (02:01 +0100)
Fixes #15084.

js/dropdown.js
js/tests/unit/dropdown.js

index ae192e570d9bc76f3bad2c2152ab7b39065cd8c8..64ec34d5d8768a40cdfea1723c00493a6a3e10e8 100644 (file)
@@ -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)
 
index 335795fde8c0111a9ca5c1615769832069f15b2b..3cdf637ee05d1dbefc75f8e5a1a5e5f4e0e9989d 100644 (file)
@@ -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()
+  })
+
 })