У меня есть модальное окно, которое появляется при нажатии на ссылку .btn.
Когда он активен, пользователи по-прежнему могут нажимать Tab, чтобы сосредоточиться на ссылках и кнопках в фоновом режиме, некоторые из которых имеют ссылки для загрузки. Когда эти ссылки выделены и пользователь нажимает клавишу ввода, выполняется действие загрузки.
Есть ли способ отключить фоновую вкладку, пока модальное окно активно?
Я использую следующие версии:
https://valor-software.com/ngx-bootstrap/#/modals (V2.4), Угловой CLI 1.6





вы должны использовать класс на фоновой странице, у которого есть pointer-events: none;, когда модальное окно открыто. Просто используйте ngClass, чтобы его можно было динамически изменять при щелчке по вашему .btn и переключать модальное событие закрытия.
Можно ли ограничить вкладку внутри самого модального окна?
Я думаю, что указатель-события: нет; уже делает это; Вы спрашиваете что-то вроде: указатель мыши не может выйти из модального окна?
Я хочу разместить клавишу табуляции внутри самого модального окна, как в демонстрации getbootstrap.com/docs/4.0/components/modal/#live-demo. В плагине, который я использую, он сейчас не работает. Я ищу решение этой проблемы.
как я вижу в этом примере, вы можете использовать события указателя! Итак, я думаю, вы спрашиваете, как сделать модальное закрытие, когда вы щелкаете снаружи, не так ли?
Поскольку в последней версии ngx-bootstrap (v2.4) нет исправления, я создал директиву для захвата фокуса клавиши табуляции в самом модальном поле.
Я использовал угловую версию: Angular 5.
Моя директива ниже.
Directive
import {Directive, ElementRef, HostListener} from '@angular/core';
@Directive({
selector: '[appSdbModalFocus]'
})
export class SdbModalFocusDirective {
KEYCODE_TAB: number = 9;
constructor(
private hostElement: ElementRef
) {}
ngOnInit() {}
@HostListener("keydown", ["$event"])
onKeyDown(e: KeyboardEvent): any {
if (e.key === 'Tab' || e.keyCode === this.KEYCODE_TAB) {
let focusableEls = this.hostElement.nativeElement;
let modalContent = $(focusableEls).find('a, :input, [tabindex]');
var firstFocusableEl = modalContent.first()[0];
var lastFocusableEl = modalContent.last()[0];
if (e.shiftKey) /* shift + tab */ {
this.log(firstFocusableEl, lastFocusableEl, document);
if (document.activeElement === firstFocusableEl) {
lastFocusableEl.focus();
e.preventDefault();
}
} else /* tab */ {
this.log(firstFocusableEl, lastFocusableEl, document);
if (document.activeElement === lastFocusableEl) {
firstFocusableEl.focus();
e.preventDefault();
}
}
}
}
}
HTML
<form appSdbModalFocus>
...
</form>
Создал эту директиву с помощью ловушка-фокус-в-элементе
Спасибо! Я сам реализовал это решение. Вы должны принять свой собственный ответ.
Он работает, пока я не добавлю кнопку к модальному содержимому (find ('a, button,: input, ...). Кроме того, кажется, что он работает, только если директива применяется к форме. Я бы хотел переместить ее вверх, поэтому он охватывает весь модальный экран (кнопка закрытия вверху, некоторые кнопки внизу). По какой-либо причине директива не должна работать, если применяется к div, который обертывает форму и модальный-заголовок, модальный-нижний колонтитул?
В этом решении используется $ (...). Find (), и я видел другой аналогичный пример, в котором используется .querySelectAll (). Однако как это можно было заменить с помощью Angular @ViewChildren?
Я нашел аналогичную проблему и ответил, преобразовал функцию disableTabModalShown в директиву в своем приложении. stackoverflow.com/questions/25142244/…