内容在元素焦点 + 很多 "clickable" 上被阅读两次
Content being read twice on focus of element + lots of "clickable"
问题
当父级 div
获得焦点时,div 的全部内容将被读取两次而不是一次。此外 "clickable" 被读取了六次而不是一次。
此问题只出现在GoogleChrome.
我在可访问性和尝试变得更好方面非常糟糕,所以请随意拆开我这里的东西。
这些是我正在寻找的机器人
我正在寻找一种方法让 Chrome 只读一次这些内容,最好只说 "clickable" 一次而不是六次,因为我相信这对任何人来说都会非常烦人屏幕读取用户。
标记:
<div #tooltip class="citi-tooltip {{open ? 'open' : ''}}" tabindex="0">
<!-- trigger icon -->
<i
#tooltipTrigger
(click)="toggleTooltipContent()"
class="tooltip-toggle icon-svg svg-question"
[attr.aria-label]="buttonLabel ? buttonLabel : null"
></i>
<!-- content wrapper -->
<div
#tooltipContent
[id]="tooltipId"
class="tooltip-content {{position}}"
[ngStyle]="styles"
role="tooltip"
>
<!-- arrow -->
<span class="tooltip-arrow"></span>
<!-- header -->
<p class="tooltip-header {{size}}" [innerHtml]="tooltipTitle"></p>
<!-- content body -->
<div class="tooltip-body {{size}}" >
<!-- tooltip body section -->
<div *ngIf="tooltipBody" [innerHtml]="tooltipBody"></div>
<!-- ngcontent body section -->
<div *ngIf="!tooltipBody"><ng-content></ng-content></div>
</div>
</div>
</div>
这是如何工作的:
所以基本上只要父 div 具有 tabindex="0"
属性获得焦点,工具提示就会通过 CSS 显示。它也显示在父 div 悬停时,当单击该图标时 open
class 被切换,无论用户鼠标交互如何,它都会保持打开状态。
所以这里的绝大部分功能都依赖于默认的浏览器行为,CSS 混合 非常 很少 JavaScript。
注意我在这里使用 Angular 4 可能会有所帮助,因此普通开发人员可能不熟悉看似奇怪的标记。
实际工具提示内容:
Bob Is A Bob
Bob is a bobbing bobber that bobs like a bobbing bob. Bob. That is all
NVDA 输出的内容:
Bob Is A Bob Bob is a bobbing bobber that bobs like a bobbing bob. Bob. That is all
clickable
clickable
clickable
clickable
clickable
Bob Is A Bob
clickable
Bob is a bobbing bobber that bobs like a bobbing bob. Bob. That is all
如有任何帮助,我们将不胜感激!
当 NVDA 在一个浏览器中表现奇怪时,我会查看对象的结构,看看我是否可以重新格式化它而不会丢失对其他浏览器有效的内容。由于内容会重复出现很多 "this item is clickable" 公告,这可能是由于内容和触发器周围有 tabindex=0
的包装器。尝试将内容放在包装 div 之外(紧接其后)。
或者,它可能会重复内容,因为文本位于内部 HTML 属性中(我猜 Angular 获取该属性值并将其放入元素中?),但是似乎不太可能,因为我希望它在 Firefox 中也是一个问题。
找出答案的最佳方法是查看 HTML 在 Chrome 的开发工具检查器中的外观,并将其与 Accessibility extension 工具中显示的内容进行比较.
NVDA
可以选择关闭可点击的公告。打开 NVDA
按 Insert+Ctrl+D 然后取消选中 "Clickable"
NVDA
会多次读取 Clickable。
问题
当父级 div
获得焦点时,div 的全部内容将被读取两次而不是一次。此外 "clickable" 被读取了六次而不是一次。
此问题只出现在GoogleChrome.
我在可访问性和尝试变得更好方面非常糟糕,所以请随意拆开我这里的东西。
这些是我正在寻找的机器人
我正在寻找一种方法让 Chrome 只读一次这些内容,最好只说 "clickable" 一次而不是六次,因为我相信这对任何人来说都会非常烦人屏幕读取用户。
标记:
<div #tooltip class="citi-tooltip {{open ? 'open' : ''}}" tabindex="0">
<!-- trigger icon -->
<i
#tooltipTrigger
(click)="toggleTooltipContent()"
class="tooltip-toggle icon-svg svg-question"
[attr.aria-label]="buttonLabel ? buttonLabel : null"
></i>
<!-- content wrapper -->
<div
#tooltipContent
[id]="tooltipId"
class="tooltip-content {{position}}"
[ngStyle]="styles"
role="tooltip"
>
<!-- arrow -->
<span class="tooltip-arrow"></span>
<!-- header -->
<p class="tooltip-header {{size}}" [innerHtml]="tooltipTitle"></p>
<!-- content body -->
<div class="tooltip-body {{size}}" >
<!-- tooltip body section -->
<div *ngIf="tooltipBody" [innerHtml]="tooltipBody"></div>
<!-- ngcontent body section -->
<div *ngIf="!tooltipBody"><ng-content></ng-content></div>
</div>
</div>
</div>
这是如何工作的:
所以基本上只要父 div 具有 tabindex="0"
属性获得焦点,工具提示就会通过 CSS 显示。它也显示在父 div 悬停时,当单击该图标时 open
class 被切换,无论用户鼠标交互如何,它都会保持打开状态。
所以这里的绝大部分功能都依赖于默认的浏览器行为,CSS 混合 非常 很少 JavaScript。
注意我在这里使用 Angular 4 可能会有所帮助,因此普通开发人员可能不熟悉看似奇怪的标记。
实际工具提示内容:
Bob Is A Bob
Bob is a bobbing bobber that bobs like a bobbing bob. Bob. That is all
NVDA 输出的内容:
Bob Is A Bob Bob is a bobbing bobber that bobs like a bobbing bob. Bob. That is all
clickable
clickable
clickable
clickable
clickable
Bob Is A Bob
clickable
Bob is a bobbing bobber that bobs like a bobbing bob. Bob. That is all
如有任何帮助,我们将不胜感激!
当 NVDA 在一个浏览器中表现奇怪时,我会查看对象的结构,看看我是否可以重新格式化它而不会丢失对其他浏览器有效的内容。由于内容会重复出现很多 "this item is clickable" 公告,这可能是由于内容和触发器周围有 tabindex=0
的包装器。尝试将内容放在包装 div 之外(紧接其后)。
或者,它可能会重复内容,因为文本位于内部 HTML 属性中(我猜 Angular 获取该属性值并将其放入元素中?),但是似乎不太可能,因为我希望它在 Firefox 中也是一个问题。
找出答案的最佳方法是查看 HTML 在 Chrome 的开发工具检查器中的外观,并将其与 Accessibility extension 工具中显示的内容进行比较.
NVDA
可以选择关闭可点击的公告。打开 NVDA
按 Insert+Ctrl+D 然后取消选中 "Clickable"
NVDA
会多次读取 Clickable。