Диалог Dojo не выделяет первый элемент фокуса при первом показе

Работа над обновлением веб-проекта, работавшего под IE, для работы в современных браузерах, таких как Chrome, Edge и Firefox. Используется Dojo Toolkit (v1.x).

Одна неприятность, с которой пришлось столкнуться, — это невозможность выделения первого фокусируемого виджета при первом вызове dijit.Dialog. Возьмите следующий пример тестовой страницы:

Когда диалоговое окно открывается впервые, кнопка «ОК» не показывает контур, указывающий на то, что он имеет фокус, хотя он есть. Если на физической клавиатуре нажать клавишу Shift (или любую другую), то появится контур.

Я пытался имитировать нажатие клавиши, используя различные методы, в надежде, что это вызовет контур фокуса, но безуспешно. Я попытался использовать метод Dijit focus() для кнопок, но контур не отображается, хотя фокус клавиатуры меняется на сфокусированный на кнопке.

В IE11 контур фокуса отображается по желанию, но в основных современных браузерах, Chrome, Edge (Chromium) и Firefox, контур фокуса отображается в начальном диалоговом окне. Это известная проблема с Dojo 1.x? Проблема существует в версии 1.17.0 и, по крайней мере, в версиях до 1.10.

1 ответ

После еще нескольких экспериментов оказалось, что если я явно установлю свойство структуры CSS, отключив класс dijitButtonFocused, я смогу выделить начальную кнопку фокуса. Граница CSS также может использоваться, но она может изменить отображаемый макет, поскольку она влияет на общий размер объекта, а контур — нет.

Ниже приведен пример CSS, который пытается воспроизвести выделение фокуса для браузеров на основе Chrome и Firefox:

Похоже, что Firefox не использует закругленные углы при выделении, поэтому не предпринимается никаких попыток сделать это. Firefox имеет настраиваемое свойство CSS для поддержки закругленных углов для контуров, если это необходимо, но я намерен воссоздать собственный стиль выделения браузера.

Селектор .nihilo, скорее всего, не нужен, но я использую его, так как проект настраивает тему .nihilo, поэтому включен для конкретных целей.

Другие вопросы по тегам