javascript - 具有角色按钮 : Clickable elements must be focusable and should have interactive semantics 的 anchor 链接内图像的可访问性

标签 javascript events accessibility keyboard-events

我有以下标记:

<li class="remove-filter-key-list-item" data-id="{{this.id}}">
  <a
    href="#"
    class="remove-filter-key-button flx jst-cntr"
    role="button"
    tabindex=0
  >
    <img
      class="remove-filter-key-list-icon"
      src="{{this.icon}}"
      alt="{{this.statusText}} icon"
    />
    <span
      class="remove-filter-key-list-title"
    >{{this.statusText}}</span>
  </a>
</li>

正在触发this error在 Firefox 辅助功能检查器中:

enter image description here

据我所知,该链接需要一个 onclick 监听器、一个 keydown 监听器、一个选项卡索引以及两个事件的防止默认。我尝试添加这些,但错误仍然存​​在。 Firefox 似乎专注于 anchor 链接内的图像,而不是链接本身,这是可点击的东西。

我正在 JavaScript 文件中添加监听器(我没有也无法将它们内联添加到 html 中),如下所示:

function addStatusFilterListener(el) {
  el.addEventListener("click", onStatusFilterToggle);
  el.addEventListener("keydown", (e) => {
    e.preventDefault();
    if (e.keycode === 32) {
      //if spacebar
      onStatusFilterToggle(e);
    }
  });
}

但这似乎不起作用 - 空格键滚动页面,并且我的事件未触发,并且辅助功能检查器似乎正在包含的 img 标记上查找事件。构建解决这些问题的正确方法是什么?

最佳答案

为了节省大量的解决方法和摆弄,最直接的解决方案是将图像包装在按钮中,而不是尝试使 anchor 表现得像按钮。

这意味着您不必担心不同的处理程序等,如click按钮上的事件处理程序具有内置的所有行为!

在下面的示例中,我将您的代码更改为使用 <button>相反并添加了 data-id只是为了提醒单击了哪个项目。

您将看到可以使用Enter空格以及单击鼠标来激活该项目!

const removeBtn = document.querySelectorAll('.remove-filter-key-button');

removeBtn.forEach((element)  => {
   element.addEventListener('click', onStatusFilterToggle);
});

function onStatusFilterToggle(e){
  let el = e.currentTarget;  
  let itemID = el.getAttribute('data-id');
  alert("you pressed item: " + itemID);
}
button{
   border: 0px;
   background: transparent;
}
button:hover{
   cursor: pointer;
   opacity: 0.9;
}
<button class="remove-filter-key-button flx jst-cntr" data-id="1">
    <img
      class="remove-filter-key-list-icon"
      src="https://picsum.photos/100/100"
      alt="Some Alt Text icon"
    /><br>
    <span
      class="remove-filter-key-list-title"
    >Current Status</span>
  </button>
  <button class="remove-filter-key-button flx jst-cntr"  data-id="2">
    <img
      class="remove-filter-key-list-icon"
      src="https://picsum.photos/100/100"
      alt="Some Alt Text icon"
    /><br>
    <span
      class="remove-filter-key-list-title"
    >Current Status</span>
  </button>

关于javascript - 具有角色按钮 : Clickable elements must be focusable and should have interactive semantics 的 anchor 链接内图像的可访问性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70442992/

相关文章:

javascript - 我的按钮无法使用 jquery

javascript - jquery一键将文本转为URL

javascript - 访问.js文件中的头javascript变量jquery函数

c# - 鼠标移动太快无法捕获事件

javascript - 祖先的事件处理程序可以停止其子元素的事件之一的传播吗?

css - 如何在不删除 Firefox/IE 轮廓焦点的情况下自定义输入边框

javascript - 使用 jquery 隐藏具有匹配 ID 和类的 div

javascript - 在添加它们的值后找到那些等于 x 的元素的索引

programming-languages - 对于盲人程序员来说,编程语言的哪些句法特征是有问题的?

java - 如何在java中实现可访问性