Skip to content

Commit 5c99158

Browse files
author
Gabriel Schulhof
committed
Custom select: Instead of determining the option that was clicked via a selector, use the "data-option-index" attribute that was set during list creation.
This attribute was being set but it was not being used.
1 parent 04b2f73 commit 5c99158

File tree

1 file changed

+25
-24
lines changed

1 file changed

+25
-24
lines changed

js/widgets/forms/select.custom.js

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)