From: Scott González Date: Wed, 7 Jan 2009 14:36:30 +0000 (+0000) Subject: Fixed tabindex normalization so that elements that natively support tabbing, but... X-Git-Url: http://git.asbjorn.biz/?p=jquery.git;a=commitdiff_plain;h=49d0d5b7a3628947a14028d14ed042746cc6c3e4 Fixed tabindex normalization so that elements that natively support tabbing, but don't have a tabindex explicitly set return 0 instead of undefined. Removed jQuery.support.tabindex since we're only normalizing non-XML right now and all browsers support tabIndex for HTML documents. --- diff --git a/src/core.js b/src/core.js index c4c3867..61a9bd9 100644 --- a/src/core.js +++ b/src/core.js @@ -968,11 +968,15 @@ jQuery.extend({ if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) return elem.getAttributeNode( name ).nodeValue; - // elem.tabindex doesn't always return the correct value + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - if ( name == jQuery.props.tabindex ) { - var attributeNode = elem.getAttributeNode(jQuery.props.tabindex); - return attributeNode && attributeNode.specified && attributeNode.value || undefined; + if ( name == "tabIndex" ) { + var attributeNode = elem.getAttributeNode( "tabIndex" ); + return attributeNode && attributeNode.specified + ? attributeNode.value + : elem.nodeName.match(/^(a|area|button|input|object|select|textarea)$/i) + ? 0 + : undefined; } return elem[ name ]; diff --git a/src/support.js b/src/support.js index c334e78..bacc5bd 100644 --- a/src/support.js +++ b/src/support.js @@ -51,10 +51,6 @@ // (IE uses styleFloat instead of cssFloat) cssFloat: !!a.style.cssFloat, - // Verify tabindex attribute existence - // (IE uses tabIndex instead of tabindex) - tabindex: !a.getAttributeNode('tabindex'), - // Will be defined later scriptEval: false, noCloneEvent: true @@ -101,5 +97,5 @@ jQuery.props = { maxlength: "maxLength", cellspacing: "cellSpacing", rowspan: "rowSpan", - tabindex: jQuery.support.tabindex ? "tabindex" : "tabIndex" + tabindex: "tabIndex" }; diff --git a/test/unit/core.js b/test/unit/core.js index e1c3733..ee5f805 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -562,7 +562,7 @@ test("attr('tabindex')", function() { equals(jQuery('#divWithNoTabIndex').attr('tabindex'), undefined, 'no tabindex, not tabbable by default'); // link without a tabindex - equals(jQuery('#linkWithNoTabIndex').attr('tabindex'), undefined, 'no tabindex, tabbable by default'); + equals(jQuery('#linkWithNoTabIndex').attr('tabindex'), 0, 'no tabindex, tabbable by default'); }); test("attr('tabindex', value)", function() { @@ -1560,7 +1560,7 @@ test("removeClass(String) - simple", function() { }); test("toggleClass(String)", function() { - expect(6); + expect(6); var e = jQuery("#firstp"); ok( !e.is(".test"), "Assert class not present" ); e.toggleClass("test"); @@ -1568,12 +1568,12 @@ test("toggleClass(String)", function() { e.toggleClass("test"); ok( !e.is(".test"), "Assert class not present" ); - e.toggleClass("test", false); - ok( !e.is(".test"), "Assert class not present" ); - e.toggleClass("test", true); - ok( e.is(".test"), "Assert class present" ); - e.toggleClass("test", false); - ok( !e.is(".test"), "Assert class not present" ); + e.toggleClass("test", false); + ok( !e.is(".test"), "Assert class not present" ); + e.toggleClass("test", true); + ok( e.is(".test"), "Assert class present" ); + e.toggleClass("test", false); + ok( !e.is(".test"), "Assert class not present" ); }); test("removeAttr(String", function() {