@@ -81,21 +81,20 @@ $.widget( "ui.popup", {
81
81
82
82
if ( ! this . element . is ( ":ui-menu" ) ) {
83
83
//default use case, wrap tab order in popup
84
- this . element . bind ( "keydown.ui-popup" , function ( event ) {
85
- if ( event . keyCode !== $ . ui . keyCode . TAB ) {
86
- return ;
87
- }
88
-
89
- var tabbables = $ ( ":tabbable" , this ) ,
90
- first = tabbables . first ( ) ,
91
- last = tabbables . last ( ) ;
92
-
93
- if ( event . target === last [ 0 ] && ! event . shiftKey ) {
94
- first . focus ( 1 ) ;
95
- return false ;
96
- } else if ( event . target === first [ 0 ] && event . shiftKey ) {
97
- last . focus ( 1 ) ;
98
- return false ;
84
+ this . _bind ( { keydown : function ( event ) {
85
+ if ( event . keyCode !== $ . ui . keyCode . TAB ) {
86
+ return ;
87
+ }
88
+ var tabbables = $ ( ":tabbable" , this . element ) ,
89
+ first = tabbables . first ( ) ,
90
+ last = tabbables . last ( ) ;
91
+ if ( event . target === last [ 0 ] && ! event . shiftKey ) {
92
+ first . focus ( 1 ) ;
93
+ event . preventDefault ( ) ;
94
+ } else if ( event . target === first [ 0 ] && event . shiftKey ) {
95
+ last . focus ( 1 ) ;
96
+ event . preventDefault ( ) ;
97
+ }
99
98
}
100
99
} ) ;
101
100
}
@@ -174,11 +173,13 @@ $.widget( "ui.popup", {
174
173
// set focus to the first tabbable element in the popup container
175
174
// if there are no tabbable elements, set focus on the popup itself
176
175
var tabbables = this . element . find ( ":tabbable" ) ;
176
+ this . removeTabIndex = false ;
177
177
if ( ! tabbables . length ) {
178
178
if ( ! this . element . is ( ":tabbable" ) ) {
179
179
this . element . attr ( "tabindex" , "0" ) ;
180
+ this . removeTabIndex = true ;
180
181
}
181
- tabbables . add ( this . element ) ;
182
+ tabbables = tabbables . add ( this . element [ 0 ] ) ;
182
183
}
183
184
tabbables . first ( ) . focus ( 1 ) ;
184
185
}
@@ -195,8 +196,10 @@ $.widget( "ui.popup", {
195
196
. attr ( "aria-hidden" , true )
196
197
. attr ( "aria-expanded" , false ) ;
197
198
198
- this . options . trigger . attr ( "tabindex" , 0 ) ;
199
-
199
+ this . options . trigger . attr ( "tabindex" , 0 ) ;
200
+ if ( this . removeTabIndex ) {
201
+ this . element . removeAttr ( "tabindex" ) ;
202
+ }
200
203
this . isOpen = false ;
201
204
this . _trigger ( "close" , event ) ;
202
205
}
0 commit comments