gpt4 book ai didi

angular - 如何限制模态框中的Tab键?

转载 作者:行者123 更新时间:2023-12-04 01:56:51 25 4
gpt4 key购买 nike

当您单击 .btn 链接时,我会弹出一个模态窗口。

当它处于事件状态时,用户仍然可以按 Tab 键来关注后台的链接和按钮,其中一些链接和按钮具有下载链接。当这些链接被选中并且用户按下回车键时,下载操作就会发生。

有没有办法在模态窗口处于事件状态时禁用背景选项卡?

我正在使用以下版本:

https://valor-software.com/ngx-bootstrap/#/modals (V2.4), Angular CLI 1.6

最佳答案

由于最新的 ngx-bootstrap(v2.4) 没有修复,我创建了一个指令来将 Tab 键焦点捕获在模式框本身中。

我使用的 Angular 版本是 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>

trap-focus-in-an-element 的帮助下创建了这个指令

关于angular - 如何限制模态框中的Tab键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49981903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com