打字和屏幕阅读器



我使用Typeahead/Bloodhound从数据库的内容生成一个列表。我希望猎犬的建议是由屏幕阅读器阅读时突出显示。我在元素中添加了一些咏叹调角色,以尝试从屏幕阅读器读取内容。然而,当高亮显示时,屏幕阅读器是沉默的。如果我给元素添加焦点,那么blodhound模态窗口将关闭,这将不起作用。

目前为止我有什么:

 var myTypeahead = $('.supersearch').typeahead({
      highlight: true,
      autoselect: true
 },
 {
      name: 'search-content',
      displayKey: 'title',
      source: content.ttAdapter(),
      templates:{
           header: '<h3 class="typeaheadTitle">Filtering Content...</h3>',
           empty: [
                '<div class="noResults">',
                'No Results',
                '</div>'
           ].join('n'),
           suggestion: Handlebars.compile('<div class="searchListItem"><a href="{{link}}" class="searchLink" aria-label="{{title}}">{{title}}</a></div>')
      }
 });
      
 myTypeahead.on('typeahead:cursorchanged', function($e, datum){
      $(this).html(datum["value"]);
      var focused = $( document.activeElement )
      var submenuHighlight = focused.parent().find('.tt-cursor .searchListItem a');
      console.log(submenuHighlight.text());
 });
 // Add aria dialog role
 $('.tt-dataset-search-content').attr({
      'role': 'dialog',
      'aria-live': 'assertive',
      'aria-relevant':'additions'
 });

将aria标签角色添加到输出列表和容器中,如果尝试通知阅读器此列表动态更改失败。我也在监听cursorchanged,所以我可以隔离我需要表达的元素(console.log验证这一点),但是我不知道如何告诉阅读器使用tt-cursor类读取当前项。

下面是HTML输出:
 <div class="tt-dataset-search-content" role="dialog" aria-live="rude" aria-relevant="additions">
      <h3 class="typeaheadTitle">Filtering Content...</h3>
      <span class="tt-suggestions" style="display: block;">
      <div class="tt-suggestion tt-cursor">
           <div class="searchListItem" style="white-space: normal;">
                <a href="/about" class="searchLink" aria-label="About"><strong class="tt-highlight">A</strong>bout</a>
           </div>
      </div>
      <div class="tt-suggestion">
           <div class="searchListItem" style="white-space: normal;">
                <a href="Things" class="searchLink" aria-label="Things">THings</a>
           </div>
      </div>
 </div>

当读者关注输入元素时,所有读者告诉我这是一个搜索字段。

<标题> 更新

添加小提琴:http://jsfiddle.net/m9a4sg52/

虽然我不认为这是一个1-1设置,因为预输入结果是在DOM加载后生成的

为突出显示的元素设置标题可能会有所帮助。

myTypeahead.on('typeahead:cursorchanged', function($e, datum) {
  console.log($e);
  $(".tt-cursor").attr("title", datum);
  /*
  $(this).html(datum["value"]);
  var focused = $( document.activeElement )
  var submenuHighlight = focused.parent().find('.tt-cursor .searchListItem a');
  console.log(submenuHighlight.text());
  */
});
或者为什么不添加自定义模板,然后给标题属性支持title属性的元素之一

尝试使用ARIA APG中可用的设计模式之一。

使用列表框的ARIA1.1自动完成模式似乎最适合您的情况。它使用组合框、文本框或搜索框和列表框角色,以及其他一些aria属性。

您可能会发现屏幕阅读器支持有点不一致,但这是可用的最健壮的模式。GDS对他们在Gov.UK网站上使用的版本进行了广泛的测试和迭代,该模式可在AlphaGov回购中获得

相关内容

  • 没有找到相关文章

最新更新