Skip to content

Commit 956eaf7

Browse files
committed
Core: Remove ancestor visibility requirement from :focusable selector
1 parent cd6c751 commit 956eaf7

File tree

2 files changed

+11
-20
lines changed

2 files changed

+11
-20
lines changed

tests/unit/core/selector.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,14 +127,14 @@ test( "focusable - hidden styles", function() {
127127
isNotFocusable( "#displayNoneAncestor-input", "input, display: none parent" );
128128
isNotFocusable( "#displayNoneAncestor-span", "span with tabindex, display: none parent" );
129129

130-
isNotFocusable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" );
131-
isNotFocusable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" );
130+
isFocusable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" );
131+
isFocusable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" );
132132

133133
isNotFocusable( "#displayNone-input", "input, display: none" );
134-
isNotFocusable( "#visibilityHidden-input", "input, visibility: hidden" );
134+
isFocusable( "#visibilityHidden-input", "input, visibility: hidden" );
135135

136136
isNotFocusable( "#displayNone-span", "span with tabindex, display: none" );
137-
isNotFocusable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" );
137+
isFocusable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" );
138138
});
139139

140140
test( "focusable - natively focusable with various tabindex", function() {
@@ -212,14 +212,14 @@ test( "tabbable - hidden styles", function() {
212212
isNotTabbable( "#displayNoneAncestor-input", "input, display: none parent" );
213213
isNotTabbable( "#displayNoneAncestor-span", "span with tabindex, display: none parent" );
214214

215-
isNotTabbable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" );
216-
isNotTabbable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" );
215+
isTabbable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" );
216+
isTabbable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" );
217217

218218
isNotTabbable( "#displayNone-input", "input, display: none" );
219-
isNotTabbable( "#visibilityHidden-input", "input, visibility: hidden" );
219+
isTabbable( "#visibilityHidden-input", "input, visibility: hidden" );
220220

221221
isNotTabbable( "#displayNone-span", "span with tabindex, display: none" );
222-
isNotTabbable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" );
222+
isTabbable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" );
223223
});
224224

225225
test( "tabbable - natively tabbable with various tabindex", function() {

ui/core.js

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -189,23 +189,14 @@ function focusable( element, hasTabindex ) {
189189
if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
190190
return false;
191191
}
192-
img = $( "img[usemap='#" + mapName + "']" )[ 0 ];
193-
return !!img && visible( img );
192+
img = $( "img[usemap='#" + mapName + "']" );
193+
return img.length && img.is( ":visible" );
194194
}
195195
return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?
196196
!element.disabled :
197197
"a" === nodeName ?
198198
element.href || hasTabindex :
199-
hasTabindex ) &&
200-
// the element and all of its ancestors must be visible
201-
visible( element );
202-
}
203-
204-
function visible( element ) {
205-
return $.expr.filters.visible( element ) &&
206-
!$( element ).parents().addBack().filter( function() {
207-
return $.css( this, "visibility" ) === "hidden";
208-
} ).length;
199+
hasTabindex ) && $( element ).is( ":visible" );
209200
}
210201

211202
$.extend( $.expr[ ":" ], {

0 commit comments

Comments
 (0)