2017-08-28 59 views
0

我正在努力让屏幕阅读器更易于使用我的代码,并且遇到了这种情况,并且找不到任何答案。如果只有在满足条件的情况下按钮才可见,那么您如何恰当地应用sr-only文本?当按钮不可见时,我想避免屏幕阅读器阅读文本,因为此时按钮不会提供任何功能。什么是正确的方式来应用sr-only文本的asp:LinkBut​​tons是可变的可见?

按钮在分页可用时可见(根据需要选择下一个和上一个)。 请参阅附件中的代码。

<div id="divPager" runat="server" class="gutter-bottom text-center"> 
    <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional" RenderMode="Inline"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="btnSearch" EventName="ServerClick" /> 
    </Triggers> 
    <ContentTemplate> 

     <ul class="pager"> 
     <li> 
      <asp:LinkButton runat="server" ID="btnPrev" Visible="False" CommandName="PrevPage"> 
      <i class="fa fa-arrow-left"></i> Prev 
      </asp:LinkButton> 
     </li> 
     <li> 
      <asp:LinkButton runat="server" ID="btnNext" Visible="False" CommandName="NextPage"> 
      Next <i class="fa fa-arrow-right"></i> 
      </asp:LinkButton> 
     </li> 
     </ul> 

    </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 

有一件事我已经考虑被放置跨度内的asp:LinkBut​​ton的(S),并从代码隐藏有条件地将类=“SR-只有”和相应的跨度文本。我在正确的轨道上吗?有没有更好的办法?感谢您的输入

+0

考虑增加你的意见的主要职务为编辑提供新的信息。 – bendl

+0

感谢@bendl,接受了您的建议,并在主帖中添加了我的评论作为附加文字。 – JakeofSpades

+0

您是在屏幕阅读器中测试吗?一般来说,一个sr-only类只是可视化地隐藏文本。你的页面可能通过display:none或者类似的方式完全隐藏按钮,所以它不应该和你的sr-only样式冲突。一个功能性示例会有所帮助 – aardrian

回答

0

我张贴我目前的解决方案,以解决这个问题。我绝不认为这是最好的解决方案,如果你花时间向我展示更好的方法,我将不胜感激。 这里是我做了我的aspx页:

<ul class="pager"> 
      <li> 
       <asp:LinkButton runat="server" ID="btnPrev" Visible="False" CommandName="PrevPage"> 
       <span id="btnPrevSR" runat="server" class="sr-only"></span> 
       <i class="fa fa-arrow-left"></i> Prev 
       </asp:LinkButton> 
      </li> 
      <li> 
       <asp:LinkButton runat="server" ID="btnNext" Visible="False" CommandName="NextPage"> 
       <span id="btnNextSR" runat="server" class="sr-only"></span> 
       <i class="fa fa-arrow-right"></i> Next 
       </asp:LinkButton> 
      </li> 
      </ul> 

在我后面的代码

If btnPrev.Visible = True Then 
    btnPrevSR.InnerHtml = "Previous Page of Announcements" 
End If 

If btnNext.Visible = True Then 
    btnNextSR.InnerHtml = "Next Page of Announcements" 
End If 

下面就是这段代码看起来产生时等。注意空<li>因为visible设置为false btnPrev

<ul class="pager"> 
      <li> 

      </li> 
      <li> 
       <a id="ctl00_ctl00_cpContent_cpContent_btnNext" href="javascript:__doPostBack(&#39;ctl00$ctl00$cpContent$cpContent$btnNext&#39;,&#39;&#39;)"><span id="ctl00_ctl00_cpContent_cpContent_btnNextSR" class="sr-only">Next Page of Announcements</span> 
       <i class="fa fa-arrow-right"></i> Next 
       </a> 
      </li> 
      </ul> 
+0

我的.NET日子在我身后,但我知道'runat = server'的结果是HTML,它可能看起来不像你放在那里的东西。你能分享HTML输出吗?例如,'visible = false'是否会生成任何元素,带有'display:none'的元素,具有CSS'visibility'设置的元素,...?这些都可能导致不同的结果。我迄今看到的东西虽然看起来不错。 – aardrian

+0

@aardrian当其中一个按钮被设置为visible = false时,会发生这种情况。列表项

  • 为空的任何html。我将在我的chrome浏览器的sources选项卡中添加从开发工具中看到的结果。 – JakeofSpades

    +0

    我看到你的更新答案。我认为缺失的元素可能是最好的方法。 – aardrian

    相关问题