Landing a fix for non-link anchor tabIndex (from scott.gonzalez). Fixes ticket #3916.
authorJohn Resig <jeresig@gmail.com>
Mon, 19 Jan 2009 21:40:23 +0000 (21:40 +0000)
committerJohn Resig <jeresig@gmail.com>
Mon, 19 Jan 2009 21:40:23 +0000 (21:40 +0000)
src/core.js
test/index.html
test/unit/core.js

index a11ceb4..6dc4f00 100644 (file)
@@ -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 ];
index e47a852..b5b80dd 100644 (file)
@@ -198,7 +198,7 @@ Z</textarea>
                </div>
                
                <div id="tabindex-tests">
-                       <ol id="listWithTabIndex" tabindex="0">
+                       <ol id="listWithTabIndex" tabindex="5">
                                <li id="foodWithNegativeTabIndex" tabindex="-1">Rice</li>
                                <li id="foodNoTabIndex">Beans</li>
                                <li>Blinis</li>
@@ -209,6 +209,9 @@ Z</textarea>
                        <span>...</span><a href="#" id="linkWithNoTabIndex">Eat lots of food</a><span>...</span> |
                        <span>...</span><a href="#" id="linkWithTabIndex" tabindex="2">Eat a little food</a><span>...</span> |
                        <span>...</span><a href="#" id="linkWithNegativeTabIndex" tabindex="-1">Eat no food</a><span>...</span>
+                       <span>...</span><a id="linkWithNoHrefWithNoTabIndex">Eat a burger</a><span>...</span>
+                       <span>...</span><a id="linkWithNoHrefWithTabIndex" tabindex="1">Eat some funyuns</a><span>...</span>
+                       <span>...</span><a id="linkWithNoHrefWithNegativeTabIndex" tabindex="-1">Eat some funyuns</a><span>...</span>
                </div>
        </div>
        </dl>
index 80a9335..7942548 100644 (file)
@@ -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() {