From 96152559e0e2fa1afc70f8994e664f5805aebad5 Mon Sep 17 00:00:00 2001 From: John Resig Date: Mon, 19 Jan 2009 21:40:23 +0000 Subject: [PATCH] Landing a fix for non-link anchor tabIndex (from scott.gonzalez). Fixes ticket #3916. --- src/core.js | 6 ++++-- test/index.html | 5 ++++- test/unit/core.js | 29 ++++++++++++++--------------- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/core.js b/src/core.js index a11ceb4..6dc4f00 100644 --- a/src/core.js +++ b/src/core.js @@ -986,9 +986,11 @@ jQuery.extend({ var attributeNode = elem.getAttributeNode( "tabIndex" ); return attributeNode && attributeNode.specified ? attributeNode.value - : elem.nodeName.match(/^(a|area|button|input|object|select|textarea)$/i) + : elem.nodeName.match(/(button|input|object|select|textarea)/i) ? 0 - : undefined; + : elem.nodeName.match(/^(a|area)$/i) && elem.href + ? 0 + : undefined; } return elem[ name ]; diff --git a/test/index.html b/test/index.html index e47a852..b5b80dd 100644 --- a/test/index.html +++ b/test/index.html @@ -198,7 +198,7 @@ Z
-
    +
    1. Rice
    2. Beans
    3. Blinis
    4. @@ -209,6 +209,9 @@ Z ...Eat lots of food... | ...Eat a little food... | ...Eat no food... + ...Eat a burger... + ...Eat some funyuns... + ...Eat some funyuns...
diff --git a/test/unit/core.js b/test/unit/core.js index 80a9335..7942548 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -552,22 +552,21 @@ if ( !isLocal ) { } test("attr('tabindex')", function() { - expect(5); - - // tabindex 0 - equals(jQuery('#listWithTabIndex').attr('tabindex'), 0, 'tabindex of 0'); - - // positive tabindex - equals(jQuery('#linkWithTabIndex').attr('tabindex'), 2, 'tabindex of 2'); - - // negative tabindex - equals(jQuery('#linkWithNegativeTabIndex').attr('tabindex'), -1, 'negative tabindex'); - - // regular element without a tabindex - equals(jQuery('#divWithNoTabIndex').attr('tabindex'), undefined, 'no tabindex, not tabbable by default'); + expect(8); - // link without a tabindex - equals(jQuery('#linkWithNoTabIndex').attr('tabindex'), 0, 'no tabindex, tabbable by default'); + // elements not natively tabbable + equals(jQuery('#listWithTabIndex').attr('tabindex'), 5, 'not natively tabbable, with tabindex set to 0'); + equals(jQuery('#divWithNoTabIndex').attr('tabindex'), undefined, 'not natively tabbable, no tabindex set'); + + // anchor with href + equals(jQuery('#linkWithNoTabIndex').attr('tabindex'), 0, 'anchor with href, no tabindex set'); + equals(jQuery('#linkWithTabIndex').attr('tabindex'), 2, 'anchor with href, tabindex set to 2'); + equals(jQuery('#linkWithNegativeTabIndex').attr('tabindex'), -1, 'anchor with href, tabindex set to -1'); + + // anchor without href + equals(jQuery('#linkWithNoHrefWithNoTabIndex').attr('tabindex'), undefined, 'anchor without href, no tabindex set'); + equals(jQuery('#linkWithNoHrefWithTabIndex').attr('tabindex'), 1, 'anchor without href, tabindex set to 2'); + equals(jQuery('#linkWithNoHrefWithNegativeTabIndex').attr('tabindex'), -1, 'anchor without href, no tabindex set'); }); test("attr('tabindex', value)", function() { -- 1.7.10.4