32

我们刚刚将我们的应用程序升级到 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">&times;</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
        },
        () => {
        }
    );

我的问题是如何删除这个不符合我们预期行为的默认自动对焦?

感谢您的阅读,请原谅拼写错误。

4

6 回答 6

64

出于可访问性和键盘导航的原因,焦点需要在模态范围内。默认情况下,焦点位于模式中的第一个可聚焦元素上,在您的情况下是关闭按钮。您可以将ngbAutofocus属性添加到您希望焦点所在的元素。

焦点管理演示

<button type="button" ngbAutofocus class="btn btn-danger"
      (click)="modal.close('Ok click')">Ok</button>

您可以在github上阅读更多内容

于 2018-12-05T02:05:23.450 回答
10

如果您不介意关闭按钮实际聚焦但想摆脱丑陋的轮廓,您可以使用outline: none.

template.html

<button type="button" aria-label="Close">Close</button>

styles.css

button[aria-label="Close"]:focus {
  outline: none;
}
于 2019-10-04T15:14:19.783 回答
9

这是一个丑陋的黑客,但你可以添加一个不可见的元素作为第一个元素:

<input type="text" style="display:none" />
于 2019-02-20T09:26:09.960 回答
1

添加style="outline:无;”到您的关闭按钮

例子 :

<button type="button" class="close" aria-label="Close" (click)="modal.dismiss('Cross click')"> 
<span aria-hidden="true">&times;</span>
</button>
于 2020-02-14T11:31:22.693 回答
0

就我而言,我想完全删除按钮或输入的自动对焦。我在主容器中设置了“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">&times;</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>
于 2021-12-15T13:33:57.570 回答
0

我注意到Bootstrap本身并没有突出显示第一个控件

ngx-bootstrap也不会突出显示第一个控件

于 2021-12-28T12:38:09.797 回答