@@ -82,6 +82,28 @@ $.widget( "mobile.selectmenu", $.mobile.selectmenu, {
8282 . trigger ( params . event ) ;
8383 } ,
8484
85+ _handleListKeydown : function ( event ) {
86+ var target = $ ( event . target ) ,
87+ li = target . closest ( "li" ) ;
88+
89+ // switch logic based on which key was pressed
90+ switch ( event . keyCode ) {
91+ // up or left arrow keys
92+ case 38 :
93+ goToAdjacentItem ( li , target , "prev" ) ;
94+ return false ;
95+ // down or right arrow keys
96+ case 40 :
97+ goToAdjacentItem ( li , target , "next" ) ;
98+ return false ;
99+ // If enter or space is pressed, trigger click
100+ case 13 :
101+ case 32 :
102+ target . trigger ( "click" ) ;
103+ return false ;
104+ }
105+ } ,
106+
85107 build : function ( ) {
86108 var selectId , prefix , popupId , dialogId , label , thisPage , isMultiple , menuId , themeAttr , overlayThemeAttr ,
87109 dividerThemeAttr , menuPage , listbox , list , header , headerTitle , menuPageContent , menuPageClose , headerClose , self ,
@@ -166,14 +188,15 @@ $.widget( "mobile.selectmenu", $.mobile.selectmenu, {
166188 this . list . attr ( "role" , "listbox" ) ;
167189 this . _on ( this . list , {
168190 focusin : "_handleListFocus" ,
169- focusout : "_handleListFocus"
191+ focusout : "_handleListFocus" ,
192+ keydown : "_handleListKeydown"
170193 } ) ;
171194 this . list
172195 . delegate ( "li:not(.ui-disabled, .ui-li-divider)" , "click" , function ( event ) {
173196
174197 // index of option tag to be selected
175198 var oldIndex = self . select [ 0 ] . selectedIndex ,
176- newIndex = self . list . find ( "li:not(.ui-li-divider)" ) . index ( this ) ,
199+ newIndex = $ . mobile . getAttribute ( this , "option-index" , true ) ,
177200 option = self . _selectOptions ( ) . eq ( newIndex ) [ 0 ] ;
178201
179202 // toggle selected status on the tag for multi selects
@@ -202,28 +225,6 @@ $.widget( "mobile.selectmenu", $.mobile.selectmenu, {
202225 }
203226
204227 event . preventDefault ( ) ;
205- } )
206- . keydown ( function ( event ) { //keyboard events for menu items
207- var target = $ ( event . target ) ,
208- li = target . closest ( "li" ) ;
209-
210- // switch logic based on which key was pressed
211- switch ( event . keyCode ) {
212- // up or left arrow keys
213- case 38 :
214- goToAdjacentItem ( li , target , "prev" ) ;
215- return false ;
216- // down or right arrow keys
217- case 40 :
218- goToAdjacentItem ( li , target , "next" ) ;
219- return false ;
220- // If enter or space is pressed, trigger click
221- case 13 :
222- case 32 :
223- target . trigger ( "click" ) ;
224-
225- return false ;
226- }
227228 } ) ;
228229
229230 // button refocus ensures proper height calculation
0 commit comments