@@ -2,6 +2,7 @@ const MAX_ITEMS = 10;
22const UP_ARROW = "ArrowUp" ;
33const DOWN_ARROW = "ArrowDown" ;
44const ENTER_KEY = "Enter" ;
5+ const ESCAPE_KEY = "Escape" ;
56
67const searchInput = document . getElementById ( "search" ) ;
78const searchResults = document . getElementById ( "search-results" ) ;
@@ -20,14 +21,34 @@ document.addEventListener("keyup", function (keyboardEvent) {
2021} ) ;
2122
2223document . addEventListener ( "keydown" , function ( keyboardEvent ) {
23- const len = searchResultsItems . getElementsByTagName ( "li" ) . length - 1 ;
24-
25- if ( keyboardEvent . key === DOWN_ARROW ) {
26- downArrow ( len ) ;
27- } else if ( keyboardEvent . key === UP_ARROW ) {
28- upArrow ( len ) ;
29- } else if ( keyboardEvent . key === ENTER_KEY ) {
30- searchItemSelected . getElementsByTagName ( "a" ) [ 0 ] . click ( ) ;
24+ const items = searchResultsItems . getElementsByTagName ( "li" ) ;
25+ const len = items . length - 1 ;
26+
27+ switch ( keyboardEvent . key ) {
28+ case DOWN_ARROW :
29+ keyboardEvent . preventDefault ( ) ;
30+ downArrow ( len ) ;
31+ break ;
32+
33+ case UP_ARROW :
34+ keyboardEvent . preventDefault ( ) ;
35+ upArrow ( len ) ;
36+ break ;
37+
38+ case ENTER_KEY : {
39+ const parent = searchItemSelected || searchResultsItems ;
40+ const target = parent . querySelector ( "a" ) ;
41+
42+ if ( target ) target . click ( ) ;
43+ break ;
44+ }
45+
46+ case ESCAPE_KEY : {
47+ searchInput . value = "" ;
48+ searchResults . style . display = "none" ;
49+ searchInput . blur ( ) ;
50+ break ;
51+ }
3152 }
3253} ) ;
3354
@@ -50,6 +71,7 @@ function downArrow(len) {
5071 }
5172
5273 searchItemSelected . focus ( )
74+ searchItemSelected . scrollIntoView ( { block : "nearest" } ) ;
5375 addClass ( searchItemSelected , "selected" ) ;
5476}
5577
@@ -69,7 +91,8 @@ function upArrow(len) {
6991 searchItemSelected = searchResultsItems . getElementsByTagName ( "li" ) [ len ] ;
7092 }
7193 }
72- searchItemSelected . focus ( )
94+ searchItemSelected . focus ( ) ;
95+ searchItemSelected . scrollIntoView ( { block : "nearest" } ) ;
7396 addClass ( searchItemSelected , "selected" ) ;
7497}
7598
0 commit comments