Таможенная проблема схемы - PullRequest
2 голосов
/ 28 июля 2011

Я сделал следующий скрипт для переопределения системы контуров по умолчанию в браузерах:

*
{
  margin: 0;
  outline-color: #C79700;
  outline-width: 1px;
  padding: 0;
}

$('document').delegate('[tabindex]', 'focusin focusout mousedown', function(event)
{
    var target = $(event.target);

    switch(event.type)
    {
        case 'focusin':
        {
            var clicked = target.data('clicked');

            target.removeData('clicked');

            if (clicked)
                target.css('outline-style', 'none');
            else
                target.css('outline-style', 'solid');

            break;
        }

        case 'focusout':
            target.css('outline-style', 'none');
            break;

        case 'mousedown':
        {
            if (target.prop('tagName') === 'B')
                target = target.parent();

            if (!target.is(':focus'))
                target.data('clicked', true);
            else
                target.css('outline-style', 'none');

            break;
        }
    }
})

Все работает отлично, но у меня есть небольшая проблема: если я активирую другое окно (сворачивая браузер или используя ALT +)TAB), документ теряет фокус, как и элемент ... затем, если я повторно активирую окно браузера, данные ('clicked'), очевидно, ложны, и если выбран элемент [tabindex], он выделяется сценарием.

Как я могу предотвратить это?Я пробовал много решений без успеха.Есть ли что-то вроде:

            if (clicked || browser-has-just-become-active)
                target.css('outline-style', 'none');
            else
                target.css('outline-style', 'solid');

Большое спасибо!

1 Ответ

2 голосов
/ 08 сентября 2011

Я уверен, что вы можете использовать:

window.onfocus

или для IE:

document.onfocusin
...