【问题标题】:Button retains focused after click单击后按钮保持焦点
【发布时间】:2019-04-09 20:12:16
【问题描述】:

我有一个按钮,点击后会导航到另一条路线。相关代码为:

<button (click)="goBack()" mat-button
      aria-label="Previous Screen" role="navigation">
      <mat-icon>keyboard_arrow_left</mat-icon>
</button>

还有点击处理程序:

  goBack() {
    this.location.back();
  }

当我单击按钮时,路线会发生变化,但按钮会获得焦点。那是我做错了吗?

【问题讨论】:

  • 我认为用户与之交互的元素获得焦点是好的,我认为用户知道焦点在哪里是好的。为什么?可访问性。
  • 这个流程很自然,也对用户友好。你想改变焦点吗?
  • 我会选择阿迪的解决方案。但它可能是角度材料设计库中的一个错误

标签: javascript html angular angular-router


【解决方案1】:

最简单的解决方案是:

button:focus {
  outline: none;
}

但是,从按钮中删除轮廓绝对不利于可访问性。有些用户无法控制鼠标,需要能够使用键盘在页面中切换。删除轮廓使这非常困难。最好防止按钮在点击时获得焦点。

在我看来,在onMouseDown 中调用e.preventDefault() 是一种更清洁的解决方案。这无疑是一个可访问性友好的解决方案(但该解决方案可能与您的项目不兼容)。

可以在here找到多个干净且易于访问的解决方案。

干杯!

【讨论】:

  • @danielnixon 在否决投票之前,您是否阅读了我的全部答案?我明确表示outline: none 是一个快速解决方案,但它不利于可访问性,我提到了一些更简洁的解决方案 + 一个指向另一个 SO 答案的链接,并附有额外的解释。
【解决方案2】:

您想查看HTMLElement.blur() 功能。我对 Angular 不太熟悉,但您需要访问事件及其目标才能这样做。

这样的事情应该可以工作:

<button (click)="goBack($event)" mat-button
      aria-label="Previous Screen" role="navigation">
      <mat-icon>keyboard_arrow_left</mat-icon>
</button>

对于 JS:

goBack(event) {
    event.target.blur()
    this.location.back();
  }

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多