diff --git a/js/bootstrap-typeahead.js b/js/bootstrap-typeahead.js
index 9b123fb3fbe428c7fe49c915eba55794c1da5a10..387fd2a6d45f2d8e607d33f21c6601993f24e584 100644
--- a/js/bootstrap-typeahead.js
+++ b/js/bootstrap-typeahead.js
@@ -217,7 +217,7 @@
     }
 
   , keydown: function (e) {
-      this.suppressKeyPressRepeat = !~$.inArray(e.keyCode, [40,38,9,13,27])
+      this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27])
       this.move(e)
     }
 
diff --git a/js/tests/unit/bootstrap-typeahead.js b/js/tests/unit/bootstrap-typeahead.js
index 0f7aed27dde0e18cb8509d3c83d0af96403ae668..0cf26b31533dbb82f2de180fac32c2160eec7de0 100644
--- a/js/tests/unit/bootstrap-typeahead.js
+++ b/js/tests/unit/bootstrap-typeahead.js
@@ -143,10 +143,19 @@ $(function () {
         equals(typeahead.$menu.find('.active').length, 1, 'one item is active')
         ok(typeahead.$menu.find('li').first().hasClass('active'), "first item is active")
 
+        // simulate entire key pressing event
         $input.trigger({
           type: 'keydown'
         , keyCode: 40
         })
+        .trigger({
+          type: 'keypress'
+        , keyCode: 40
+        })
+        .trigger({
+          type: 'keyup'
+        , keyCode: 40
+        })
 
         ok(typeahead.$menu.find('li').first().next().hasClass('active'), "second item is active")
 
@@ -155,6 +164,14 @@ $(function () {
           type: 'keydown'
         , keyCode: 38
         })
+        .trigger({
+          type: 'keypress'
+        , keyCode: 38
+        })
+        .trigger({
+          type: 'keyup'
+        , keyCode: 38
+        })
 
         ok(typeahead.$menu.find('li').first().hasClass('active'), "first item is active")
 
@@ -202,4 +219,4 @@ $(function () {
 
         typeahead.$menu.remove()
       })
-})
\ No newline at end of file
+})