Angular7 和 NgbModal:如何删除默认自动对焦
Angular7 and NgbModal: how to remove default auto focus
我们刚刚将我们的应用程序升级到 angular 7,我们注意到所有 ngBootstrap 模态现在在关闭按钮上都有一个默认的自动对焦,如下图所示。
这是我的代码:
html模态代码:
<form [formGroup]="storeForm" novalidate>
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Modal Test</h4>
<button type="button" class="close" aria-label="Close"
(click)="activeModal.dismiss('Cross click')">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<h4>Todo</h4>
</div>
<div class="modal-footer">
<button role="button" type="submit" class="btn btn-primary"
(click)="activeModal.close('Finish click')" prevent-double-
submit>{{ 'store.add.finish' | translate }}</button>
</div>
</div>
</form>
由于我的 component.ts
,模态是如何调用的
const modal = this._modalService.open(ModalComponent, { backdrop:
'static', size: 'lg'});
modal.result.then(
(data) => {
// some code
},
() => {
}
);
我的问题是如何删除不符合我们预期行为的默认自动对焦?
感谢阅读,错别字请见谅
出于辅助功能和键盘导航的原因,焦点需要位于模态内。默认情况下,焦点位于模态中的第一个可聚焦元素上,在您的情况下是关闭按钮。您可以将 ngbAutofocus
属性添加到您希望焦点所在的元素。
<button type="button" ngbAutofocus class="btn btn-danger"
(click)="modal.close('Ok click')">Ok</button>
您可以在 github
上阅读更多内容
这是一个丑陋的 hack,但您可以添加一个不可见元素作为第一个元素:
<input type="text" style="display:none" />
如果你不介意关闭按钮实际聚焦但又想摆脱丑陋的轮廓,你可以使用outline: none
。
template.html
:
<button type="button" aria-label="Close">Close</button>
styles.css
:
button[aria-label="Close"]:focus {
outline: none;
}
添加 style="outline:
none;" 到您的关闭按钮
示例:
<button type="button" class="close" aria-label="Close" (click)="modal.dismiss('Cross click')">
<span aria-hidden="true">×</span>
</button>
在我的例子中,我想完全移除按钮或输入上的自动对焦。我在主容器中设置了“ngbAutofocus”(下面的示例),它对我有用。
如果有人有更好的解决方案,请分享。谢谢:-)
<div class="modal-header" ngbAutofocus>
<h4 class="modal-title" id="modal-title">Profile deletion</h4>
<button type="button" class="close" aria-label="Close button" aria-describedby="modal-title" (click)="modal.dismiss('Cross click')">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p><strong>Are you sure you want to delete <span class="text-primary">"John Doe"</span> profile?</strong></p>
<p>All information associated to this user profile will be permanently deleted.
<span class="text-danger">This operation can not be undone.</span>
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" (click)="modal.dismiss('cancel click')">Cancel</button>
<button type="button" class="btn btn-danger" (click)="modal.close('Ok click')">Ok</button>
</div>
我注意到Bootstrap本身并没有高亮第一个控件
ngx-bootstrap同样不高亮第一个控件
我们刚刚将我们的应用程序升级到 angular 7,我们注意到所有 ngBootstrap 模态现在在关闭按钮上都有一个默认的自动对焦,如下图所示。
这是我的代码:
html模态代码:
<form [formGroup]="storeForm" novalidate>
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Modal Test</h4>
<button type="button" class="close" aria-label="Close"
(click)="activeModal.dismiss('Cross click')">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<h4>Todo</h4>
</div>
<div class="modal-footer">
<button role="button" type="submit" class="btn btn-primary"
(click)="activeModal.close('Finish click')" prevent-double-
submit>{{ 'store.add.finish' | translate }}</button>
</div>
</div>
</form>
由于我的 component.ts
,模态是如何调用的 const modal = this._modalService.open(ModalComponent, { backdrop:
'static', size: 'lg'});
modal.result.then(
(data) => {
// some code
},
() => {
}
);
我的问题是如何删除不符合我们预期行为的默认自动对焦?
感谢阅读,错别字请见谅
出于辅助功能和键盘导航的原因,焦点需要位于模态内。默认情况下,焦点位于模态中的第一个可聚焦元素上,在您的情况下是关闭按钮。您可以将 ngbAutofocus
属性添加到您希望焦点所在的元素。
<button type="button" ngbAutofocus class="btn btn-danger"
(click)="modal.close('Ok click')">Ok</button>
您可以在 github
上阅读更多内容这是一个丑陋的 hack,但您可以添加一个不可见元素作为第一个元素:
<input type="text" style="display:none" />
如果你不介意关闭按钮实际聚焦但又想摆脱丑陋的轮廓,你可以使用outline: none
。
template.html
:
<button type="button" aria-label="Close">Close</button>
styles.css
:
button[aria-label="Close"]:focus {
outline: none;
}
添加 style="outline:
none;" 到您的关闭按钮
示例:
<button type="button" class="close" aria-label="Close" (click)="modal.dismiss('Cross click')">
<span aria-hidden="true">×</span>
</button>
在我的例子中,我想完全移除按钮或输入上的自动对焦。我在主容器中设置了“ngbAutofocus”(下面的示例),它对我有用。 如果有人有更好的解决方案,请分享。谢谢:-)
<div class="modal-header" ngbAutofocus>
<h4 class="modal-title" id="modal-title">Profile deletion</h4>
<button type="button" class="close" aria-label="Close button" aria-describedby="modal-title" (click)="modal.dismiss('Cross click')">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p><strong>Are you sure you want to delete <span class="text-primary">"John Doe"</span> profile?</strong></p>
<p>All information associated to this user profile will be permanently deleted.
<span class="text-danger">This operation can not be undone.</span>
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" (click)="modal.dismiss('cancel click')">Cancel</button>
<button type="button" class="btn btn-danger" (click)="modal.close('Ok click')">Ok</button>
</div>
我注意到Bootstrap本身并没有高亮第一个控件
ngx-bootstrap同样不高亮第一个控件