Ticket #3559: cross-browser-tabindex.patch

File cross-browser-tabindex.patch, 2.1 KB (added by colinclark, 14 years ago)

Patch from Colin Clark for cross-browser tabindex normalization

  • ui.core.js

     
    11(function($) {
    22
     3function normalizeTabindexName() {
     4        return $.browser.msie < 8 ? "tabIndex" : "tabindex";
     5}
     6       
     7function hasTabindexAttr(element) {
     8        var attributeNode = element.getAttributeNode(normalizeTabindexName());
     9        return attributeNode ? attributeNode.specified : false;
     10}
     11
    312function getTabIndex(element) {
    4         var index = parseInt(element.getAttribute('tabIndex'), 10);
    5         if (isNaN(index)) {
    6                 index = element.tabIndex;
     13        if (!hasTabindexAttr(element)) {
     14                return undefined;
    715        }
    8        
    9         return index;
     16        var value = parseInt(element.getAttribute(normalizeTabindexName()), 10);
     17        return !isNaN(value) ? value : undefined;
    1018}
    1119
    1220$.extend($.expr[':'], {
     
    2735       
    2836        tabbable: function(element) {
    2937                var tabIndex = getTabIndex(element);
    30                
    31                 return !isNaN(tabIndex) && tabIndex >= 0 && $(element).is(':focusable');
     38                return isNaN(tabIndex) ? $(element).is(':focusable') : tabIndex >= 0;
    3239        }
    3340});
    3441
  • tests/core.js

     
    4545});
    4646
    4747test("tabbable - tabindex", function() {
    48         expect(4);
     48        expect(6);
    4949       
    5050        ok( $('#input4-1').is(':tabbable'), 'input, tabindex 0');
    5151        ok( $('#input4-2').is(':tabbable'), 'input, tabindex 10');
    5252        ok(!$('#input4-3').is(':tabbable'), 'input, tabindex -1');
    5353        ok(!$('#input4-4').is(':tabbable'), 'input, tabindex -50');
     54        ok($('#input4-5').is(':tabbable'), 'input, invalid tabindex value ("foo")');
     55        ok(!$('#span4-5').is(':tabbable'), 'span, invalid tabindex value ("foo")');
    5456});
    5557
    5658})(jQuery);
  • tests/core.html

     
    6565                <input id="input4-2" tabindex="10" />
    6666                <input id="input4-3" tabindex="-1" />
    6767                <input id="input4-4" tabindex="-50" />
     68                <input id="input4-5" tabindex="foo" />
     69                <span id="span4-1" tabindex="foo"></span>
    6870        </div>
    6971</div>
    7072