Skip to content
Permalink
Browse files

Fixed tabindex normalization so that elements that natively support t…

…abbing, 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.
  • Loading branch information
scottgonzalez committed Jan 7, 2009
1 parent f9e0b1e commit 49d0d5b7a3628947a14028d14ed042746cc6c3e4
Showing with 17 additions and 17 deletions.
  1. +8 −4 src/core.js
  2. +1 −5 src/support.js
  3. +8 −8 test/unit/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 ];
@@ -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"
};
@@ -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,20 +1560,20 @@ 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");
ok( e.is(".test"), "Assert class present" );
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() {

0 comments on commit 49d0d5b

Please sign in to comment.
You can’t perform that action at this time.