博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
符合ARIA的radiogroup
阅读量:5900 次
发布时间:2019-06-19

本文共 2600 字,大约阅读时间需要 8 分钟。

HTML

      

Drink Options

  • Water
  • Tea
  • Coffee
  • Cola
  • Ginger Ale

省略css,js是核心,以下为部分核心js代码

function RadioGroup(id) {    this.el = document.querySelector(id);    this.buttons = slice(this.el.querySelectorAll('.radio'));    this.focusedIdx = 0;    this.focusedButton = this.buttons[this.focusedIdx];    this.el.addEventListener('keydown', this.handleKeyDown.bind(this));    this.el.addEventListener('click', this.handleClick.bind(this));    // Set ARIA role for the radio group.    this.el.setAttribute('role', 'radiogroup');    var firstButton = true;    for (var button of this.buttons) {      if (firstButton) {        button.tabIndex = '0';        firstButton = false;      } else {        button.tabIndex = '-1';      }    // Set ARIA role for the radio.      button.setAttribute('role', 'radio');    }  }

上面为radiogroup和radio添加role

RadioGroup.prototype.handleKeyDown = function(e) {  switch(e.keyCode) {    case VK_UP:    case VK_LEFT: {      e.preventDefault();      this.focusedIdx--;      if (this.focusedIdx < 0)        this.focusedIdx = this.focusedIdx + this.buttons.length;      break;    }    case VK_DOWN:    case VK_RIGHT: {      e.preventDefault();      this.focusedIdx = (this.focusedIdx + 1) % this.buttons.length;      break;    }  case VK_SPACE:      var focusedButton = e.target;      var idx = this.buttons.indexOf(focusedButton);      if (idx < 0)        return;      this.focusedIdx = idx;      break;    default:      return;  }  this.changeFocus();};RadioGroup.prototype.handleClick = function(e) {  var button = e.target;  var idx = this.buttons.indexOf(button);  if (idx < 0)    return;  this.focusedIdx = idx;  this.changeFocus();};

上为监听器函数

RadioGroup.prototype.changeFocus = function() {   // Set the old button to tabindex -1   this.focusedButton.tabIndex = -1;   this.focusedButton.removeAttribute('checked');   this.focusedButton.setAttribute('aria-checked', 'false');   // Set the new button to tabindex 0 and focus it   this.focusedButton = this.buttons[this.focusedIdx];   this.focusedButton.tabIndex = 0;   this.focusedButton.focus();   this.focusedButton.setAttribute('checked', '');   this.focusedButton.setAttribute('aria-checked', 'true'); }; var group1 = new RadioGroup('#group1');}());

aria-checked这个属性不用初始化,可以在焦点改变时修改

转载地址:http://znesx.baihongyu.com/

你可能感兴趣的文章
vue2+vuex+vue-router 快速入门(五) vuex 介绍
查看>>
[Contest20180316]Mythological IV
查看>>
[xsy2300]好题
查看>>
S老师 C#编程数据结构篇 学习
查看>>
简单的模拟jQuery easyUI的行编辑
查看>>
构造 - SGU 109 Magic of David Copperfield II
查看>>
贪心 --- 巧妙解法
查看>>
20190220总结 动态规划2
查看>>
Asp.Net通过SignalR实现IM即时通讯
查看>>
hdu 1587
查看>>
SVN客户端切换地址
查看>>
C++静态库中使用_declspec(dllexport) 不能导出函数的问题
查看>>
Clistctrl多行删除总结
查看>>
用合适的索引避免不必要的全表扫描
查看>>
第十一章 LINQ
查看>>
超实用的JavaScript技巧及最佳实践
查看>>
Eclipse在线安装SVN
查看>>
[Z] 从Uncaught SyntaxError: Unexpected token ")" 问题看javascript:void的作用
查看>>
CF 187D BRT Contract
查看>>
Burnside引理和polay计数学习小记
查看>>