diff --git a/tests/unit/core/selector.js b/tests/unit/core/selector.js index ff4bb064a45..0d839bfbefe 100644 --- a/tests/unit/core/selector.js +++ b/tests/unit/core/selector.js @@ -127,14 +127,14 @@ test( "focusable - hidden styles", function() { isNotFocusable( "#displayNoneAncestor-input", "input, display: none parent" ); isNotFocusable( "#displayNoneAncestor-span", "span with tabindex, display: none parent" ); - isNotFocusable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" ); - isNotFocusable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" ); + isFocusable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" ); + isFocusable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" ); isNotFocusable( "#displayNone-input", "input, display: none" ); - isNotFocusable( "#visibilityHidden-input", "input, visibility: hidden" ); + isFocusable( "#visibilityHidden-input", "input, visibility: hidden" ); isNotFocusable( "#displayNone-span", "span with tabindex, display: none" ); - isNotFocusable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" ); + isFocusable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" ); }); test( "focusable - natively focusable with various tabindex", function() { @@ -212,14 +212,14 @@ test( "tabbable - hidden styles", function() { isNotTabbable( "#displayNoneAncestor-input", "input, display: none parent" ); isNotTabbable( "#displayNoneAncestor-span", "span with tabindex, display: none parent" ); - isNotTabbable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" ); - isNotTabbable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" ); + isTabbable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" ); + isTabbable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" ); isNotTabbable( "#displayNone-input", "input, display: none" ); - isNotTabbable( "#visibilityHidden-input", "input, visibility: hidden" ); + isTabbable( "#visibilityHidden-input", "input, visibility: hidden" ); isNotTabbable( "#displayNone-span", "span with tabindex, display: none" ); - isNotTabbable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" ); + isTabbable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" ); }); test( "tabbable - natively tabbable with various tabindex", function() { diff --git a/ui/core.js b/ui/core.js index 9ac196d38f8..99306e22fb0 100644 --- a/ui/core.js +++ b/ui/core.js @@ -189,23 +189,14 @@ function focusable( element, hasTabindex ) { if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { return false; } - img = $( "img[usemap='#" + mapName + "']" )[ 0 ]; - return !!img && visible( img ); + img = $( "img[usemap='#" + mapName + "']" ); + return img.length && img.is( ":visible" ); } return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ? !element.disabled : "a" === nodeName ? element.href || hasTabindex : - hasTabindex ) && - // the element and all of its ancestors must be visible - visible( element ); -} - -function visible( element ) { - return $.expr.filters.visible( element ) && - !$( element ).parents().addBack().filter( function() { - return $.css( this, "visibility" ) === "hidden"; - } ).length; + hasTabindex ) && $( element ).is( ":visible" ); } $.extend( $.expr[ ":" ], {