当前位置: 首页 > 知识库问答 >
问题:

向手风琴添加ARIA属性

李建中
2023-03-14

缺乏脑力,似乎无法解决以下问题:

 $('#accordion .title h4').click(function(){
        if($('#accordion .title').attr('aria-selected')==='false') {
              $('#accordion .title').attr('aria-selected' , 'true');
              $('#accordion .title').attr('aria-expanded' , 'true');
              $('#accordion .accordion-content').attr('aria-hidden' , 'false');
        }
        else{
              $('#accordion .title').attr('aria-selected' , 'false'); 
              $('#accordion .title').attr('aria-expanded' , 'false');
              $('#accordion .accordion-content').attr('aria-hidden' , 'true');         
        }
        $(this).parent().next().slideToggle(400).siblings('.accordion-
            content').slideUp(400);
        return false;
});

这里完全是:https://jsfiddle.net/77zqme17/

我试图为这个jQuery手风琴切换WAI-ARIA属性,但由于它是一个允许多个打开面板的手风琴,如果您两次单击同一个选择(注1),我的单击事件将正确触发,但如果您单击一个兄弟并仍然打开原始选择(注2),则不会正确触发。

注1:点击任务两次正确更改ARIA属性为aria选择="true"aria扩展"true"和aria隐藏="false"

注意2:当任务仍然打开时单击Vision会正确更改Vision的属性,但会将任务的类切换回aria选择="false"aria扩展"false"和aria隐藏="true",即使它仍然打开。

我试着用它变魔术,但可惜没有好结果,所以这是我最初的脚本片段。关于如何让这个该死的东西正常工作,有什么建议吗?

谢谢

共有2个答案

桂德义
2023-03-14

您的#手风琴选择器。标题太笼统,它会选择您的所有标题。在click事件中使用此,意味着它将仅适用于正确的标题。

更新的JS:

$('#accordion .title h4').click(function(){
  if($(this).closest('.title').attr('aria-selected')==='false') {
      $(this).closest('.title').attr('aria-selected' , 'true');
      $(this).closest('.title').attr('aria-expanded' , 'true');
      $(this).closest('.accordion-content').attr('aria-hidden' , 'false');
    }
  else{
      $(this).closest('.title').attr('aria-selected' , 'false'); 
      $(this).closest('.title').attr('aria-expanded' , 'false');
      $(this).closest('.accordion-content').attr('aria-hidden' , 'true');         
  }
  $(this).parent().next().slideToggle(400).siblings('.accordion-content').slideUp(400);
  return false;
});

JSFiddle:https://jsfiddle.net/77zqme17/2/

荆利
2023-03-14

每次单击时,您都应该对该单击进行本地更改。使用this仅更改所选手风琴的titlecontent的aria属性。

$('#accordion .title h4').click(function(){
  var title = $(this).closest('.accordion-container').find('.title'),
      content = $(this).closest('.accordion-container').find('.accordion-content');

  if(title.attr('aria-selected')==='false') {
    title.attr('aria-selected' , 'true');
    title.attr('aria-expanded' , 'true');
    content.attr('aria-hidden' , 'false');
  }
 else{
   title.attr('aria-selected' , 'false'); 
   title.attr('aria-expanded' , 'false');
   content.attr('aria-hidden' , 'true');         
 }
 $(this).parent().next().slideToggle(400).siblings('.accordion-content').slideUp(400);
 return false;
});
$('#accordion .title h4').click(function() {
  var title = $(this).closest('.accordion-container').find('.title'),
    content = $(this).closest('.accordion-container').find('.accordion-content');

  if (title.attr('aria-selected') === 'false') {
    title.attr('aria-selected', 'true');
    title.attr('aria-expanded', 'true');
    content.attr('aria-hidden', 'false');
  } else {
    title.attr('aria-selected', 'false');
    title.attr('aria-expanded', 'false');
    content.attr('aria-hidden', 'true');
  }
  $(this).parent().next().slideToggle(400).siblings('.accordion-content').slideUp(400);
  return false;
});
.accordion-content {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="accordion" role="tablist" aria-live="polite">

  <div class="accordion-container">
    <div class="title" id="tab0" tabindex="0" aria-controls="panel0" aria-selected="false" aria-expanded="false" role="tab">
      <h4>Mission</h4>
    </div>
    <div class="accordion-content" id="panel0" aria-labelledby="tab0" aria-hidden="true" role="tabpanel">

      <p>Test Test Test</p>

    </div>
  </div>

  <div class="accordion-container">
    <div class="title" id="tab1" tabindex="1" aria-controls="panel1" aria-selected="false" aria-expanded="false" role="tab">
      <h4>Vision</h4>
    </div>
    <div class="accordion-content" id="panel1" aria-labelledby="tab1" aria-hidden="true" role="tabpanel">

      <p>Test Test</p>

    </div>
  </div>

  <div class="accordion-container">
    <div class="title" id="tab2" tabindex="2" aria-controls="panel2" aria-selected="false" aria-expanded="false" role="tab">
      <h4>Values</h4>
    </div>
    <div class="accordion-content" id="panel2" aria-labelledby="tab2" aria-hidden="true" role="tabpanel">

      <p>
        Test
      </p>

    </div>
  </div>

</div>
 类似资料:
  • 手风琴效果其实就是通过JS改变元素的height,然后加上transition来让css动起来。 准备HTML结构 这里我们使用 dl , 因为 dt 刚好可以模拟标题, dd 模拟内容。 <div class="panel"> <dl> <dt>One Item</dt> <dd>One Item Content .</dd>

  • 我正在使用jQuery手风琴来隐藏一些数据。 accordion标题是一个带有一些标题的表格。有一个标题,我不希望你点击它,因为手风琴事件会触发。 所以 手风琴是可折叠的,如果您单击Test2(类nofunction),手风琴事件不应触发。但是如果您单击Test或其他表头,手风琴应该会触发事件。 我可以添加这个功能吗? 更新测试http://jsfiddle.net/e3Q8d/,包括jQuery

  • jQueryUI中的Accordion Widget是一个基于jQuery的可扩展和可折叠内容持有者,它被分成几个部分,可能看起来像标签。 jQueryUI提供了accordion()方法来实现这一点。 语法 (Syntax) accordion()方法可以使用两种形式 - $(selector,context).accordion(options)方法 $(selector, context).

  • 描述 (Description) 手风琴是一个图形控制元素,显示为堆叠的项目列表。 每个手风琴都可以expanded或stretched以显示与手风琴相关的内容。 可折叠布局 当您使用单个单独的可折叠元素时,您需要省略accordion-list包装元素。 以下是可折叠布局的结构 - <!-- Single collapsible element ------> <div class = "acc

  • 问题内容: 我正在使用jQuery手风琴插件来制作一些数据的手风琴。然后,我希望用户能够向手风琴添加更多数据。我已经将手风琴设置为可以正常运行,然后创建了一个函数,该函数为与手风琴语义匹配的手风琴添加了“列表项”。 是否可以“更新”手风琴,使其与新添加的元素一起工作,而无需将新数据保存到数据库并刷新页面? 像这样: 还是像jQuery 1.3中添加的live事件之类的东西,有人知道吗? 问题答案:

  • 在垂直导航中,如果存在多个分级,常常使用手风琴导航,它会以手风琴方式展开和折叠,来节约空间。 简单的说,手风琴导航就是垂直导航的层层嵌套,需要多少级,就嵌套多少层。这里就以两级导航为例,来介绍手风琴导航的基本制作方法。 为了方便控制手风琴导航的样式和行为,外层导航使用定义列表 dl、而内层使用无序列表 ul 来包裹导航中的链接元素: <dl class="accordion">     <dt>