@@ -82,6 +82,28 @@ $.widget( "mobile.selectmenu", $.mobile.selectmenu, {
82
82
. trigger ( params . event ) ;
83
83
} ,
84
84
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
+
85
107
build : function ( ) {
86
108
var selectId , prefix , popupId , dialogId , label , thisPage , isMultiple , menuId , themeAttr , overlayThemeAttr ,
87
109
dividerThemeAttr , menuPage , listbox , list , header , headerTitle , menuPageContent , menuPageClose , headerClose , self ,
@@ -166,14 +188,15 @@ $.widget( "mobile.selectmenu", $.mobile.selectmenu, {
166
188
this . list . attr ( "role" , "listbox" ) ;
167
189
this . _on ( this . list , {
168
190
focusin : "_handleListFocus" ,
169
- focusout : "_handleListFocus"
191
+ focusout : "_handleListFocus" ,
192
+ keydown : "_handleListKeydown"
170
193
} ) ;
171
194
this . list
172
195
. delegate ( "li:not(.ui-disabled, .ui-li-divider)" , "click" , function ( event ) {
173
196
174
197
// index of option tag to be selected
175
198
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 ) ,
177
200
option = self . _selectOptions ( ) . eq ( newIndex ) [ 0 ] ;
178
201
179
202
// toggle selected status on the tag for multi selects
@@ -202,28 +225,6 @@ $.widget( "mobile.selectmenu", $.mobile.selectmenu, {
202
225
}
203
226
204
227
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
- }
227
228
} ) ;
228
229
229
230
// button refocus ensures proper height calculation
0 commit comments