只是链接回有关可访问性和来自 Drupal 社区的选择的讨论。
http://drupal.org/node/1271622#comment -4962028
Chosen 中有很多不错的可用性增强功能。
该讨论中的相关部分:
太多需要工作了。 似乎没有考虑可访问性
全部都在这个小部件中,因此需要大量的 WAI-ARIA 和 JS 工作来*
尝试 * 使其符合 WCAG 2.0。从 FF6 / JAWS12 的 30 秒评论来看,最大的问题是
组件表示为输入 type=text 后跟无序列表
用户需要导航过去的所有选项(国家/地区为 243 个)
甚至忽略该字段。
对于初学者来说,搜索文本字段可以使用标签,但这很容易修复。
一个更大的问题是生成的列表项中没有锚点……如果屏幕阅读器用户知道列表项的用途,他们可以采取行动吗?
这是一个非常好的插件! 我真的很喜欢这个功能。
未来会有更好的可访问性吗? 添加 WAI-ARIA 使其符合 WCAG 2.0???
我刚刚在 thefilamentsgroups 的网站上阅读了这篇文章。 ARIA 角色可以适用于 Chosen:
http://filamentgroup.com/lab/jquery_ipod_style_and_flyout_menus/
例如:选择的结果 UL 会将 role="menu" aria-activedescendant="active-menuitem" 应用于它们,结果<li>
将具有 role="menuitem"。
选择下拉列表中的搜索框可能也需要某种 ARIA 角色?
@dotdreaming您指出了正确的文档,但您提到的角色并不完全正确。
我认为应该使用以下角色:
我认为如果有人真的深入研究WAI-ARIA 文档并将其应用于选择的
如果我能找到时间,我可以自己做。 看起来不是很难做到。
有没有让 ARIA 加入这个项目的动向?
即使它确实适用于辅助技术,也需要进行测试以确保它也适用于仅使用键盘的用户。
顺便说一句,这只是一种检查可访问性改进的简单方法,但 WAVE 确定了一些应该清理的非常基本的东西 -> http://wave.webaim.org/report?url=http%3A% 2F%2Fharvesthq.github.com%2Fchosen%2F&js=2
任何这些可访问性问题已得到解决? 我真的很喜欢在我们的主要大学网站上使用它,但这些可访问性问题让我感到厌烦
+1 - 我们收到了一位盲人用户的反馈,称选择下拉列表很难使用,而且他们在选择选项时遇到困难。 他们使用 JAWS 14 作为他们的屏幕阅读器。
尝试仅使用键盘进行导航。 选择项目非常直观(向下打开新项目的列表,向上/向下导航列表,esc 关闭列表,回车选择)。 从多选中删除项目很简单(退格),但清除单选下拉菜单会带来更多挑战。 看起来,选择了一个项目后,我可以再次按下以打开列表,然后向上导航直到没有选择任何选项(如果您的第一个项目像示例一样为空白,则很像正常的下拉列表),但我无法按 Enter 键选择空选项。 某些完全取消选择选项(或至少是空白默认选项)的方法将非常有用。
也不确定这是否值得,但我注意到数据仍然存储在隐藏的选择控件中(我假设这是它传递到表单的方式)。 更改选择的更改时,它可能是值得更新的,如果这将从WCAG满足4.1.2的标准,我正在辩论,因为UA可以以编程方式与选择控制相互作用,我们可以作为立面进行互动。出于可访问性的目的。
对于第二部分,即使您以编程方式更改选择控件的值以更新所选内容,我们也需要触发listz:updated
。
这是必需的,因为当值以编程方式更改时浏览器不会触发事件以让 Chosen 知道它(并且他们正在这样做,我们仍然必须避免无限循环,因为我们也在以编程方式更改它)
今天我将研究添加可访问性。 @marklagendijk我认为你提到的最好的
这可能有帮助,也可能没有,但我们有严格的可访问性指导方针要遵循,并且在 1.0.0 版中,我们客户的可访问性测试人员返回了以下评论:
2.在人造下拉菜单上没有明显的焦点。
我将它与 Drupal Chosen 模块结合使用。 我们还有一个盲测者,他注意到一旦输入,他就没有意识到可以输入,也没有返回结果,包括“未找到结果”。
@marklagendijk
在这个问题上的任何进展。 我正在考虑重新引入将 Chosen 添加到 Drupal 核心的问题,这是主要的阻止程序。
我在这里找到了一个很好的例子来说明如何做到这一点:
http://cookiecrook.com/test/aria/multiselect/listbox.html
这是 javascript: http :
我相信这几乎完全映射到基本选择的功能。使用列表框和多选 aria 属性实现看起来非常简单
http://www.w3.org/TR/wai-aria/roles#listbox
http://www.w3.org/TR/wai-aria/states_and_properties#aria -multiselectable
我会自己做一个补丁,但我对 js 不那么热衷。
我上面链接的 PR 通过一种更简单的方法提供了一个解决方案,该方法以渐进增强原则为中心,而不是“深入”从当前选择的代码库中制作一个完全可访问的小部件。 我欢迎任何和所有反馈。
为什么在 IE8 仍然不能正确支持 ARIA 的情况下专注于它? 不幸的是,这个 5 岁的浏览器仍然在普通浏览器的列表中。 这意味着在进行可访问性扫描时,依赖于 ARIA 的实现将失败。
为什么不使用简单地禁用所有选择并为用户提供原始选择的回退方法? 这可以通过添加一个(隐藏)链接来实现,该链接将使用一小段禁用所选的 javascript 代码。
有关 IE8 ARIA 支持的资源: http :
使用 IE8 时,您可以只进行浏览器/功能检测,而不使用 Chosen。
@Daniel15这可能更容易解决。 感谢分享您的想法。 在我的帖子中,我只是想指出实现 ARIA(目前)并不意味着它可以访问并准备好用于需要符合 WCAG 2.0 的应用程序。
很想看到这个工作。 屏幕阅读器和仅使用键盘的用户确实需要访问这些字段。 我不太关心 IE8,但至少现代浏览器的解决方案是可以接受的。 我非常喜欢 IE8 后备的想法。 看起来有两个不错的 PR - 我很想看到它们中的任何一个合并。
请对此大加+1
+1 (+) 我们需要在 Chosen 中有这个。 这是个问题
咏叹调标签(属性)
定义标记当前元素的字符串值。 另见 aria-labelledby。
aria-label 的用途与 aria-labelledby 的用途相同。 它为用户提供了一个可识别的对象名称。 标签最常见的可访问性 API 映射是可访问性名称属性。
如果标签文本在屏幕上可见,作者应该使用 aria-labelledby 而不应使用 aria-label。 可能存在无法根据元素内容以编程方式确定元素名称的情况,并且在某些情况下,提供可见标签不是所需的用户体验。 大多数宿主语言提供可用于命名元素的属性(例如 HTML [HTML] 中的标题属性),但这可能会显示浏览器工具提示。 在不需要可见标签或可见工具提示的情况下,作者可以使用 aria-label 设置元素的可访问名称。 在计算可访问名称属性时,用户代理优先使用 aria-labelledby 而不是 aria-label。
@Natshah你能用这个改变做一个拉取请求吗?
@Natshah实际上,您能否查看https://github.com/harvesthq/chosen/pull/2047以查看它是否以正确的方式实施?
是的。 那什么应该像下面的代码一样。 .
if (this.is_multiple) {
this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" aria-label="' + this.form_field_jq.parents("label") +'" value="' + this.default_text + '" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>');
} else {
this.container.html('<a class="chosen-single chosen-default" tabindex="-1"><span>' + this.default_text + '</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" aria-label="' + this.form_field_jq.parents("label") +'" autocomplete="off" /></div><ul class="chosen-results"></ul></div>');
}
但是我们可以使用这个代码:
$(".views-exposed-widget").each(function( index, element ) {
$(this).find('.form-type-select .chosen-container input').attr("aria-label" ,$.trim($(this).find('label').text()));
});
谢谢。
奖励:)
这事有进一步更新吗? 我们最近实施了选择,并从使用辅助技术“Jaws”的用户那里得到反馈,他们根本无法使用选择字段。
似乎是一个需要研究的重要问题。 这方面有任何动静吗?
我一无所知,不幸的是,鉴于辅助技术与浏览器和操作系统的大量组合,很难复制问题......通常只要你可以键盘导航+你有正确的 ARIA 实现,它应该在大多数情况下工作。
为了快速修复,我采取了确保屏幕阅读器至少可以使用原始选择字段的方法。 为此,我没有隐藏 select 元素,而是在生成的所选容器上添加screenreaders-only
类和aria-hidden:true
。
所以,在chosen.jquery.js
行中599 to 605
看起来像这样:
container_props = {
'class': container_classes.join(' '),
'style': "width: " + (this.container_width()) + ";",
'title': this.form_field.title,
// hide widget for screen-readers
'aria-hidden': 'true'
};
而行616
看起来像这样:
// instead of hiding the original select field, adding the .sr-only class to keep it accessible for screen readers
this.form_field_jq.addClass('sr-only').after(this.container);
这不是一个完美的解决方案,因为隐藏的选择和小部件都是键盘可聚焦的,但它比无法访问的小部件要好得多。
这对我有用。
我遵循了上述所有建议,并更改了以下行:
this.container.bind('mousedown.chosen', function(evt) // around line 630
到:
this.container.bind('mousedown.chosen keydown.chosen', function(evt)
谢谢
试试看有没有效果。 结构应该是这样的。 :)
我尝试根据@kirstenmalin所做的工作添加一些 ARIA 元素。 这项工作很好地推动了 A11Y,但缺少我添加的一些项目。
我在这里有一个
ARIA 标签和其他有用的属性
管理状态
close_field
和activate_field
方法期间调整属性。我将开始在我们的几个项目中使用这个版本,并且随着我们从 A11Y 视图更详细地了解我们的项目时,将不断更新我的分支。
感谢所有读到这里的人,我知道它很多,如果您有反馈,请告诉我! 我想尽可能地推动这一点。
@cooperfellows请使用您的更改打开拉取请求
@stof完成,但正如我所说,我不是 A11Y 专家,我计划进行更多测试。 我只是想分享一下我的第一个稳定通行证。
是否有任何“官方”更新? 是否根据@cooperfellows 的努力做出了任何更改?
我问的原因是,越来越多的 Jaws 用户报告小部件不可用,从而有效地呈现他们正在查看的表单不可用。
我们可以复制,如果有帮助,很高兴帮助/分享示例?
提出了拉取请求(它有一些事后已解决的小问题),但还没有发生任何事情。 我现在在生产中使用的分支在这里:
不过,我喜欢其他一些反馈。 我没有 Jaws,所以我依赖各种在线工具的审计。
所以那个分支基本上是当前的生产加上你的更改,或者是一个尚未合并最近更改的先前版本?
(谢谢顺便说一句)
是的,没错@wcndave。 虽然公关真的可以用其他眼睛进行审查。
@cooperfellows我很乐意协助可访问性测试,因为我需要将现有的选定实现移植到需要满足 WCAG 2 的新版本中。
您的拉取请求有任何更新吗?
愚蠢的问题 - 你有我可以下载的已编译的 JavaScript 版本吗?
还是我需要安装coffeescript并自己编译?
@cooperfellows那很快。 我会添加到我们的项目中,做一些测试,然后让你知道......
@KITSKevinBonett 是的,我希望得到更多关注,因为我不是 A11Y 专家。 因此,任何反馈(严厉而积极的)都值得赞赏。
嗨@cooperfellows - 我已经审查了你的实施 - 确实非常好。
由于屏幕阅读器/浏览器不兼容,有些问题可能无法(轻松)解决。
我在附件中记录了我的发现。 我提出了 1 或 2 个次要建议,希望对您有用。
_更新_
嗨@cooperfellows - 我的审计有意义吗?
嗨@KITSKevinBonett我已经离开了一个星期的假期。 一旦我忙于我的其他工作,我就会看看这个。 感谢您的反馈,我相信它会有所帮助。
@KITSKevinBonett感谢您的审核,这似乎非常彻底。 我已经根据您列出的审计部分分解了我的想法。
由插件生成的 HTML 标记
仅键盘行为
<em>
标签中,该标签确实会被斜体化(至少在 Chrome 中)。<em>
来表示文本匹配,所以我担心它们可能会相互冲突。屏幕阅读器
咏叹调
@cooperfellows - 回答您的问题:
HTML 标记
键盘行为
禁用 CSS
屏幕阅读器
咏叹调
希望这一切都有助于您的拉取请求。 你用 A11Y 做得很好。 :)
你好,
我瞎了我已经用 JAWS 测试了@cooperfellows的工作。 它完美地工作。 当 I 箭头浏览选项时,会说出所选选项。
有关于将它合并到 master 的消息吗?
在我的日常工作中,我使用 MISP(恶意软件信息共享平台 - https://github.com/MISP/MISP),其开发人员最近决定使用“选择”作为自动完成组合框。 它已成为我的噩梦。
预先感谢您的帮助。
经过几次测试,我可以确认上面发布的编译版本(.zip 存档)(2016 年 7 月 1 日)有效。
但是,当我尝试@cooperfellows的分支时,或者当我克隆@cooperfellows的分支然后与 Harvethq/master 合并时,JAWS 会正确说出菜单选项,但 ENTER 键不会提交表单。
嗨@obert01 ,非常感谢您使用 JAWS 来查看这个,这是我在工作中遗漏的一个重要部分。
这个分支与当前的收割/主分支相比已经过时了,我可能需要查看更改并调整我的 PR以使事情恢复到工作状态。
我会尽量在本月底之前的某个时候解决这个问题,我现在工作很忙。
一旦它更新,我很想让其中一位贡献者再次关注它,所以一旦我更新它,我将 ping @stof (他查看了 2016 年的初始回调)。
非常感谢。
仅供参考,我可以使用 JAWS 和 NVDA 屏幕阅读器的所有组合进行测试,使用以下浏览器:Internet Explorer 11、Google Chrome、Firefox ESR、Firefox Standard、Microsoft Edge。
这方面有什么进展吗?
我很抱歉坚持,但我的日常工作缺乏可访问性。
此外,添加可访问性支持将允许 Chosen 用于公共部门/行政网站,因为越来越多的国家/地区正在以这种方式进行监管。
谢谢
你好,
我们有一个已使用选择的应用程序,现在我们需要支持可访问性,但通过这个我可以看到它尚未合并。 如果@cooperfellows可以完成并合并,那将非常有帮助。
嗨@obert01和@csmuthukuda ,
我刚刚进行了更新,以使我的 PR 跟上 Chosen 的最新版本,请看这里:
https://github.com/harvesthq/chosen/pull/2596
您可以获取我的分叉存储库的副本并进行测试。 我会喜欢一些现实生活中的反馈。
它通过了所有的 TravisCI 检查,但我认为它们没有涵盖任何 A11Y 问题。 让我知道你的想法。
嗨@cooperfellows ,
非常感谢您为保持这一点而付出的努力。 我会对此进行测试,并让您知道对此的反馈。 我真的希望业主们考虑将这个合并给主人。 这是现在的强制性要求。
谢谢@csmuthukuda,我很乐意将其合并....
@pfiller @stof @tjschuck @koenpunt ,我能做些什么来帮助查看它? 对于一个非常棒的系统来说,它确实是一个缺失的部分。
嗨@cooperfellows ,
我已经使用最新的 Web 浏览器以及 JAWS 和 NVDA 屏幕阅读器测试了您的出色工作。 谢谢 !
使用键盘在选项中使用箭头效果很好:语音和盲文反馈是完美的,这意味着所有 ARIA 属性都得到了很好的定义。 但是,当我按 ENTER 选择一个选项时,没有任何反应。 我对 JavaScript 的经验不足,无法确定问题是否来自 Chosen,或者是否存在于使用它的应用程序中。
要重现,请尝试仅使用键盘在已选择的组合框中选择一个选项:TAB 聚焦组合框,箭头键浏览列表,ENTER 选择。
再次,非常感谢你。
感谢@obert01 提供的信息。 我会看看,看看我能找到什么。
@obert01你能尝试使用这个 JS 小提琴来确认它工作/不工作吗? 这个小提琴正在加载我最新提交的已编译 jQuery 版本。
我可以使用我的键盘(Chrome 最新版)浏览该下拉菜单,但我没有运行屏幕阅读器。
让我知道你的想法。
嗨@cooperfellows ,
你的 JS Fiddle 没问题。 因此,我认为问题是由于在 MISP (https://www.misp-project.org/) 中使用 Chosen 的方式。
我将与 MISP 项目团队核实这一点。
谢谢
谢谢@obert01。 请让我知道你发现了什么。 它可能表明与 Chosen 的特定设置不兼容,因此如果有办法让我了解 MISP 如何利用它,我可以尝试查看它们的实现。
选择在某处公开使用吗?
@cooperfellows能否请您给我一个带有最新更改的新版本,我不知道如何构建它。
@obert01 @cooperfellows我刚刚用 NVDA 尝试了 Fiddle,看来键盘导航工作得很好(包括用 ENTER 键选择)。 但是,当我使用向上和向下箭头键浏览时,屏幕阅读器会显示“________未选择”,即“未选择百慕大”。 这是预期的行为吗?
我和@woenlee 有同样的问题。 它没有那么有害。 但也许,应该检查在所选项目上设置“selected”属性的方式。
“进入”和“退出”列表项时的预期行为是什么? 什么时候
你向下导航到一个新项目,如果它读出新选择的
物品? 它还宣布不再选择什么吗? @obert01 @woenlee
2019 年 8 月 25 日星期日下午 12:18 Olivier BERT [email protected]
写道:
我和@woenlee https://github.com/woenlee有同样的问题。 它不是
如此有害。 但也许,“selected”属性的设置方式
应检查所选项目。—
你收到这个是因为你被提到了。
直接回复本邮件,在GitHub上查看
https://github.com/harvesthq/chosen/issues/264?email_source=notifications&email_token=ABT3ZTIESGLX6IYW4BF2QCLQGKWDVA5CNFSM4AATGGB2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVX5WWJ7W63LNMVX5WWJ2700000000000000000000000000000000000400000000004000000000000000000005CNFSM4AATGGB6
或静音线程
https://github.com/notifications/unsubscribe-auth/ABT3ZTMH2KUYYE7HNO2UGH3QGKWDVANCNFSM4AATGGBQ
.
——
~库珀
@cooperfellows在运行了一些 ax 可访问性测试后,我似乎在您的 PR 中发现了一个错误,这解释了为什么要这样做。 在 Abstract-chosen.coffee 的第 342 行,输入被分配了 2 个角色,“组合框”和“列表框”。
<input class="chosen-search-input" type="text" autocomplete="off" aria-expanded="false" aria-haspopup="true" role="combobox" aria-autocomplete="list" autocomplete="off" role="listbox" />
</div>
<ul class="chosen-results"></ul>
给予后
在这里向 Harvest 的客户付款,并进行内部访问的测试遇到了这个问题。 可访问性是必须的,如果这个问题没有得到解决,我们将离开 Harvest,如果 Harvest 的维护者至少不会很快对此表示支持。
@obert01你能尝试使用这个 JS 小提琴来确认它工作/不工作吗? 这个小提琴正在加载我最新提交的已编译 jQuery 版本。
我可以使用我的键盘(Chrome 最新版)浏览该下拉菜单,但我没有运行屏幕阅读器。
让我知道你的想法。
@cooperfellows
我正在使用 JAWS 2019 测试这个 JS Fiddle,在使用向上和向下箭头键导航选项时遇到了一些稍微不同的事情。
在谷歌浏览器 71.0.3578.98 上:
除非列表进行了一些滚动/渲染,否则 JAWS 不会读取当前突出显示的值。 即如果列表显示
<option selected="selected" value="United States">United States</option>
<option value="Afghanistan">Afghanistan</option>
<option value="Albania">Albania</option>
<option value="Algeria">Algeria</option>
<option value="American Samoa">American Samoa</option>
<option value="Andorra">Andorra</option>
<option value="Angola">Angola</option>
<option value="Anguilla">Anguilla</option>
<option value="Antarctica">Antarctica</option>
9 个选项,JAWS 不会在按下时读取突出显示的选项,直到您到达第 10 个选项 . 该框会自动滚动以突出显示安提瓜和巴布达,然后阅读选项。
在 IE 11.0.9600.19463 上:使用箭头键导航似乎可以正确上下读取当前突出显示的选项。 不需要某种渲染。
想知道是否有其他人经历过这种情况。 @obert01 @woenlee
您好,感谢您的工作。
不幸的是,这不能正常工作。 这很难描述,因为所使用的浏览器或屏幕阅读器的功能会发生变化。
我认为某些 aria 属性不存在或未更新。 这里我遇到的一般问题:
好点:
不幸的是,我对 ARIA、JavaScript 和 Web 的了解并不多。 我建议您确保正确设置和更新了最大的 ARIA 属性。
请在下面找到与屏幕阅读器完美交互的 JQuery 插件的演示和代码:
https://a11y.nicolas-hoffmann.net/autocomplete-list/
很抱歉不能提供更多帮助。
不要犹豫,发布您工作的新演示。 我很高兴为您测试。
最有用的评论
在这里向 Harvest 的客户付款,并进行内部访问的测试遇到了这个问题。 可访问性是必须的,如果这个问题没有得到解决,我们将离开 Harvest,如果 Harvest 的维护者至少不会很快对此表示支持。