Skip to content

Commit bdfc6d5

Browse files
committed
Autocomplete: Fix list traversal bug. Fixes #7269 - autocomplete: holding down arrow keys in Firefox does not traverse list
Use keypress event for listening for arrow keys because Firefox and Opera do not repeat keydown events for these keys.
1 parent 5076f23 commit bdfc6d5

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

ui/jquery.ui.autocomplete.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,24 +53,29 @@ $.widget( "ui.autocomplete", {
5353
})
5454
.bind( "keydown.autocomplete", function( event ) {
5555
if ( self.options.disabled || self.element.attr( "readonly" ) ) {
56+
suppressKeyPress = true;
5657
return;
5758
}
5859

5960
suppressKeyPress = false;
6061
var keyCode = $.ui.keyCode;
6162
switch( event.keyCode ) {
6263
case keyCode.PAGE_UP:
64+
suppressKeyPress = true;
6365
self._move( "previousPage", event );
6466
break;
6567
case keyCode.PAGE_DOWN:
68+
suppressKeyPress = true;
6669
self._move( "nextPage", event );
6770
break;
6871
case keyCode.UP:
72+
suppressKeyPress = true;
6973
self._move( "previous", event );
7074
// prevent moving cursor to beginning of text field in some browsers
7175
event.preventDefault();
7276
break;
7377
case keyCode.DOWN:
78+
suppressKeyPress = true;
7479
self._move( "next", event );
7580
// prevent moving cursor to end of text field in some browsers
7681
event.preventDefault();
@@ -112,7 +117,28 @@ $.widget( "ui.autocomplete", {
112117
if ( suppressKeyPress ) {
113118
suppressKeyPress = false;
114119
event.preventDefault();
120+
return;
115121
}
122+
123+
var keyCode = $.ui.keyCode;
124+
switch( event.keyCode ) {
125+
case keyCode.PAGE_UP:
126+
self._move( "previousPage", event );
127+
break;
128+
case keyCode.PAGE_DOWN:
129+
self._move( "nextPage", event );
130+
break;
131+
case keyCode.UP:
132+
self._move( "previous", event );
133+
// prevent moving cursor to beginning of text field in some browsers
134+
event.preventDefault();
135+
break;
136+
case keyCode.DOWN:
137+
self._move( "next", event );
138+
// prevent moving cursor to end of text field in some browsers
139+
event.preventDefault();
140+
break;
141+
}
116142
})
117143
.bind( "focus.autocomplete", function() {
118144
if ( self.options.disabled ) {

0 commit comments

Comments
 (0)