@@ -27,20 +27,23 @@ define( [
2727 var select = widget . select ,
2828 origDestroy = widget . _destroy ,
2929 selectID = widget . selectID ,
30+ prefix = ( selectID ? selectID : ( ( $ . mobile . ns || "" ) + "uuid-" + widget . uuid ) ) ,
31+ popupID = prefix + "-listbox" ,
32+ dialogID = prefix + "-dialog" ,
3033 label = widget . label ,
3134 thisPage = widget . select . closest ( ".ui-page" ) ,
3235 selectOptions = widget . _selectOptions ( ) ,
3336 isMultiple = widget . isMultiple = widget . select [ 0 ] . multiple ,
3437 buttonId = selectID + "-button" ,
3538 menuId = selectID + "-menu" ,
36- menuPage = $ ( "<div data-" + $ . mobile . ns + "role='dialog' data-" + $ . mobile . ns + "theme='" + widget . options . theme + "' data-" + $ . mobile . ns + "overlay-theme='" + widget . options . overlayTheme + "'>" +
39+ menuPage = $ ( "<div data-" + $ . mobile . ns + "role='dialog' id='" + dialogID + "' data-" + $ . mobile . ns + "theme='" + widget . options . theme + "' data-" + $ . mobile . ns + "overlay-theme='" + widget . options . overlayTheme + "'>" +
3740 "<div data-" + $ . mobile . ns + "role='header'>" +
3841 "<div class='ui-title'>" + label . getEncodedText ( ) + "</div>" +
3942 "</div>" +
4043 "<div data-" + $ . mobile . ns + "role='content'></div>" +
4144 "</div>" ) ,
4245
43- listbox = $ ( "<div>" , { "class" : " ui-selectmenu" } ) . insertAfter ( widget . select ) . popup ( { theme : widget . options . overlayTheme } ) ,
46+ listbox = $ ( "<div id='" + popupID + "' class=' ui-selectmenu'>" ) . insertAfter ( widget . select ) . popup ( { theme : widget . options . overlayTheme } ) ,
4447
4548 list = $ ( "<ul>" , {
4649 "class" : "ui-selectmenu-list" ,
@@ -77,6 +80,8 @@ define( [
7780 selectID : selectID ,
7881 buttonId : buttonId ,
7982 menuId : menuId ,
83+ popupID : popupID ,
84+ dialogID : dialogID ,
8085 thisPage : thisPage ,
8186 menuPage : menuPage ,
8287 label : label ,
@@ -120,8 +125,14 @@ define( [
120125 event . keyCode && ( event . keyCode === $ . mobile . keyCode . ENTER ||
121126 event . keyCode === $ . mobile . keyCode . SPACE ) ) {
122127
123- self . open ( ) ;
124- event . preventDefault ( ) ;
128+ self . _decideFormat ( ) ;
129+ if ( self . menuType === "overlay" ) {
130+ self . button . attr ( "href" , "#" + self . popupID ) . attr ( "data-" + ( $ . mobile . ns || "" ) + "rel" , "popup" ) ;
131+ } else {
132+ self . button . attr ( "href" , "#" + self . dialogID ) . attr ( "data-" + ( $ . mobile . ns || "" ) + "rel" , "dialog" ) ;
133+ }
134+ self . isOpen = true ;
135+ // Do not prevent default, so the navigation may have a chance to actually open the chosen format
125136 }
126137 } ) ;
127138
@@ -327,10 +338,7 @@ define( [
327338 var self = this ;
328339
329340 if ( self . menuType === "page" ) {
330- // doesn't solve the possible issue with calling change page
331- // where the objects don't define data urls which prevents dialog key
332- // stripping - changePage has incoming refactor
333- $ . mobile . back ( ) ;
341+ self . menuPage . dialog ( "close" ) ;
334342 } else {
335343 self . listbox . popup ( "close" ) ;
336344 self . list . appendTo ( self . listbox ) ;
@@ -342,6 +350,10 @@ define( [
342350 } ,
343351
344352 open : function ( ) {
353+ this . button . click ( ) ;
354+ } ,
355+
356+ _decideFormat : function ( ) {
345357 if ( this . options . disabled ) {
346358 return ;
347359 }
@@ -357,14 +369,6 @@ define( [
357369 screenHeight = $window . height ( ) ,
358370 screenWidth = $window . width ( ) ;
359371
360- //add active class to button
361- self . button . addClass ( $ . mobile . activeBtnClass ) ;
362-
363- //remove after delay
364- setTimeout ( function ( ) {
365- self . button . removeClass ( $ . mobile . activeBtnClass ) ;
366- } , 300 ) ;
367-
368372 function focusMenuItem ( ) {
369373 var selector = self . list . find ( "." + $ . mobile . activeBtnClass + " a" ) ;
370374 if ( selector . length === 0 ) {
@@ -403,21 +407,10 @@ define( [
403407 self . menuType = "page" ;
404408 self . menuPageContent . append ( self . list ) ;
405409 self . menuPage . find ( "div .ui-title" ) . text ( self . label . text ( ) ) ;
406- $ . mobile . changePage ( self . menuPage , {
407- transition : $ . mobile . defaultDialogTransition
408- } ) ;
409410 } else {
410411 self . menuType = "overlay" ;
411412
412- self . listbox
413- . one ( "popupafteropen" , focusMenuItem )
414- . popup ( "open" , {
415- x : self . button . offset ( ) . left + self . button . outerWidth ( ) / 2 ,
416- y : self . button . offset ( ) . top + self . button . outerHeight ( ) / 2
417- } ) ;
418-
419- // duplicate with value set in page show for dialog sized selects
420- self . isOpen = true ;
413+ self . listbox . one ( "popupafteropen" , focusMenuItem ) ;
421414 }
422415 } ,
423416
0 commit comments