Bug Tracker

Ticket #3649: tabindex.2.patch

File tabindex.2.patch, 5.8 KB (added by scottgonzalez, 13 years ago)
  • Users/sgonzale/Documents/workspace/jQuery/src/core.js

     
    970970                                if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) )
    971971                                        return elem.getAttributeNode( name ).nodeValue;
    972972
     973                                // elem.tabindex doesn't always return the correct value
     974                                // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
     975                                if ( name == jQuery.props.tabindex ) {
     976                                        var attributeNode = elem.getAttributeNode(jQuery.props.tabindex);
     977                                        return attributeNode && attributeNode.specified && attributeNode.value || undefined;
     978                                }
     979
    973980                                return elem[ name ];
    974981                        }
    975982
  • Users/sgonzale/Documents/workspace/jQuery/src/support.js

     
    5151                // (IE uses styleFloat instead of cssFloat)
    5252                cssFloat: !!a.style.cssFloat,
    5353
     54                // Verify tabindex attribute existence
     55                // (IE uses tabIndex instead of tabindex)
     56                tabindex: !a.getAttributeNode('tabindex'),
     57
    5458                // Will be defined later
    5559                scriptEval: false,
    5660                noCloneEvent: true
     
    96100        readonly: "readOnly",
    97101        maxlength: "maxLength",
    98102        cellspacing: "cellSpacing",
    99         rowspan: "rowSpan"
     103        rowspan: "rowSpan",
     104        tabindex: jQuery.support.tabindex ? "tabindex" : "tabIndex"
    100105};
  • Users/sgonzale/Documents/workspace/jQuery/test/index.html

     
    195195                                <div><div class="hidden">hidden</div></div>
    196196                        </div>
    197197                </div>
     198               
     199                <div id="tabindex-tests">
     200                        <ol id="listWithTabIndex" tabindex="0">
     201                                <li id="foodWithNegativeTabIndex" tabindex="-1">Rice</li>
     202                                <li id="foodNoTabIndex">Beans</li>
     203                                <li>Blinis</li>
     204                                <li>Tofu</li>
     205                        </ol>
     206               
     207                        <div id="divWithNoTabIndex">I'm hungry. I should...</div>
     208                        <span>...</span><a href="#" id="linkWithNoTabIndex">Eat lots of food</a><span>...</span> |
     209                        <span>...</span><a href="#" id="linkWithTabIndex" tabindex="2">Eat a little food</a><span>...</span> |
     210                        <span>...</span><a href="#" id="linkWithNegativeTabIndex" tabindex="-1">Eat no food</a><span>...</span>
     211                </div>
    198212        </div>
    199213        </dl>
    200214       
  • Users/sgonzale/Documents/workspace/jQuery/test/unit/core.js

     
    545545        });
    546546}
    547547
     548test("attr('tabindex')", function() {
     549        expect(5);
     550
     551        // tabindex 0
     552        equals(jQuery('#listWithTabIndex').attr('tabindex'), 0, 'tabindex of 0');
     553
     554        // positive tabindex
     555        equals(jQuery('#linkWithTabIndex').attr('tabindex'), 2, 'tabindex of 2');
     556
     557        // negative tabindex
     558        equals(jQuery('#linkWithNegativeTabIndex').attr('tabindex'), -1, 'negative tabindex');
     559
     560        // regular element without a tabindex
     561        equals(jQuery('#divWithNoTabIndex').attr('tabindex'), undefined, 'no tabindex, not tabbable by default');
     562
     563    // link without a tabindex
     564        equals(jQuery('#linkWithNoTabIndex').attr('tabindex'), undefined, 'no tabindex, tabbable by default');
     565});
     566
     567test("attr('tabindex', value)", function() {
     568        expect(9);
     569
     570        var element = jQuery('#divWithNoTabIndex');
     571        equals(element.attr('tabindex'), undefined, 'start with no tabindex');
     572
     573        // set a positive string
     574        element.attr('tabindex', '1');
     575        equals(element.attr('tabindex'), 1, 'set tabindex to 1 (string)');
     576
     577        // set a zero string
     578        element.attr('tabindex', '0');
     579        equals(element.attr('tabindex'), 0, 'set tabindex to 0 (string)');
     580
     581        // set a negative string
     582        element.attr('tabindex', '-1');
     583        equals(element.attr('tabindex'), -1, 'set tabindex to -1 (string)');
     584       
     585        // set a positive number
     586        element.attr('tabindex', 1);
     587        equals(element.attr('tabindex'), 1, 'set tabindex to 1 (number)');
     588
     589        // set a zero number
     590        element.attr('tabindex', 0);
     591        equals(element.attr('tabindex'), 0, 'set tabindex to 0 (number)');
     592
     593        // set a negative number
     594        element.attr('tabindex', -1);
     595        equals(element.attr('tabindex'), -1, 'set tabindex to -1 (number)');
     596       
     597        element = jQuery('#linkWithTabIndex');
     598        equals(element.attr('tabindex'), 2, 'start with tabindex 2');
     599
     600        element.attr('tabindex', -1);
     601        equals(element.attr('tabindex'), -1, 'set negative tabindex');
     602});
     603
    548604test("css(String|Hash)", function() {
    549605        expect(19);
    550606
  • Users/sgonzale/Documents/workspace/jQuery/test/unit/selector.js

     
    235235        t( "Selected Option Element", "#form option:selected", ["option1a","option2d","option3b","option3c"] );
    236236        t( "Text Contains", "a:contains('Google')", ["google","groups"] );
    237237        t( "Text Contains", "a:contains('Google Groups')", ["groups"] );
    238         t( "Element Preceded By", "p ~ div", ["foo","fx-queue","fx-tests", "moretests"] );
     238        t( "Element Preceded By", "p ~ div", ["foo","fx-queue","fx-tests", "moretests","tabindex-tests"] );
    239239        t( "Not", "a.blog:not(.link)", ["mark"] );
    240240        t( "Not - multiple", "#form option:not(:contains('Nothing'),#option1b,:selected)", ["option1c", "option1d", "option2b", "option2c", "option3d", "option3e"] );
    241241        //t( "Not - complex", "#form option:not([id^='opt']:nth-child(-n+3))", [ "option1a", "option1d", "option2d", "option3d", "option3e"] );