Как ограничить индексы табуляции только наложением и его элементами

У меня есть сложная страница с несколькими оверлеями (тип лайтбокса), которые появляются на основе выбора из нескольких выпадающих меню. Это делается с помощью jQuery. Цель состоит в том, чтобы ограничить пользователя только возможностью вставлять элементы на накладке (выше позиционированного divbox) с клавиатуры. Другими словами, удалите приведенные ниже элементы страницы из последовательности вкладок.

Мне известно, что я могу установить атрибуты tabindex = "- 1" во всех нижележащих элементах с использованием javascript или jQuery, что действительно работает, но с одним большим недостатком.

Проблема состоит в том, что проект может потребовать, чтобы некоторые из нижележащих элементов лежали с отдельными индексами табуляции, кроме индекса вкладки браузера по умолчанию. Если бы существовали какие-либо существующие атрибуты индекса вкладки, установленные на нижележащих элементах, я потеряю их, когда я их всех установлю на "-1".

Итак, мне интересно, есть ли другой способ ограничить индексирование вкладок только оверлейным div, или если есть другой подход, я не думал об этом? Любая помощь будет принята с благодарностью, поскольку она убивает мое время производства!

Ответ 1

Вот простое решение проблемы, которое не требует глобального использования tabindex. (используя jQuery). Я проверил его в Firefox, Chrome, Safari, Opera и IE9, IE8 и IE7. Кажется, хорошо работает.

function tabFocusRestrictor(lastItem,firstItem){
    $(lastItem).blur(function(){
        $(firstItem).focus();
    });
}

tabFocusRestrictor ( '# clsButton', '# firstItemInSequence');

поэтому поля ввода html на наложении будут выглядеть примерно так:

<form>
  <input type="text" id="firstItemInSequence" />
  <input type="text" id="secondItemInSequence" />
  <input type="text" id="thirdItemInSequence" />
  <button id="clsButton">close</button>
</form>

Это позволяет кнопке функционировать, как обычно, за исключением размытия, например, когда вы отключаете кнопку, а затем вы попадаете в указанное поле ввода, в этом случае тот, у которого есть идентификатор 'firstItemInSequence ".

Ответ 2

Другое решение. Эта функция дает фокус для управления с id = controlID после нажатия клавиши TAB в элементе управления с tabIndex = maxindex. Это вызовет круговое движение, нажав TAB.

Он будет расположен в:

<body class="body" onkeydown="return onKeyDownTab(event, 7,'txtName');">


function onKeyDownTab(event, maxIndex, controlFocusID)
{

    var key = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
    if (key == 9)
    {
        try
        {
            if (event.srcElement.id == "" || event.srcElement.className.indexOf("body") > -1)
            {
                document.getElementById(controlFocusID).focus();
                return false;
            }
            if (parseInt(event.srcElement.attributes.tabIndex.value) < 0 || parseInt(event.srcElement.attributes.tabIndex.value) >= maxIndex)
            {
                document.getElementById(controlFocusID).focus();
                return false;
            }
            return key;
        }
        catch (e)
        {
            return false;
        }        
    }
    else
    {
        return key;
    }
};

Ответ 3

Я думаю, что созданный jQuery плагин сделает то, что вам нужно:

https://github.com/spirytoos/TABGuard

Я надеюсь, что это поможет

Ответ 4

jSFiDDLE

$(document).ready(function() {
lastIndex = 0;
$(document).keydown(function(e) {
    if (e.keyCode == 9) var thisTab = $(":focus").attr("tabindex");
    if (e.keyCode == 9) {
        if (e.shiftKey) {
            //Focus previous input
            if (thisTab == startIndex) {
                $("#" + tabLimitInID).find('[tabindex=' + lastIndex + ']').focus();
                return false;
            }
        } else {
            if (thisTab == lastIndex) {
                $("#" + tabLimitInID).find('[tabindex=' + startIndex + ']').focus();
                return false;
            }
        }
    }
});
var setTabindexLimit = function(x, fancyID) {
        console.log(x);
        startIndex = 1;
        lastIndex = x;
        tabLimitInID = fancyID;
        $("#" + tabLimitInID).find('[tabindex=' + startIndex + ']').focus();
    }
/*Taking last tabindex=10 */
setTabindexLimit(10, "Selector_With_Where_Tab_Index_You_Want");
});

setTabindexLimit() функция два атрибута 10, который является последним Tabindex в Div и Selector_With_Where_Tab_Index_You_Want - это класс или идентификатор div, в котором вы хотите Повтор tabindexto.