2017-08-28 6 views
0

Je travaille pour rendre mon code plus accessible aux lecteurs d'écran et j'ai rencontré cette situation et je n'ai pas trouvé de réponse pour cela. Lorsque les boutons ne sont visibles que si une condition est remplie, comment appliquez-vous correctement le texte sr-only? Je veux éviter que le lecteur d'écran ne lise le texte lorsque le bouton n'est pas visible car le bouton ne fournira aucune fonction à ce moment-là.Quelle est la manière correcte d'appliquer le texte sr-only à asp: LinkButtons qui sont variablement visibles?

Les boutons sont visibles lorsque le téléavertisseur est disponible (suivant et précédent selon le cas). S'il vous plaît voir le code ci-joint.

<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> 

Une chose que j'ai considéré est de placer une travée à l'intérieur du asp: LinkButton (s) et du code-behind conditionnelle en ajoutant class = « sr seule » et la durée de texte approprié. Suis-je sur la bonne voie? Y a-t-il un meilleur moyen? Merci pour votre contribution

+0

Pensez à ajouter les nouvelles informations que vous fournissez dans les commentaires au poste principal comme une modification. – bendl

+0

merci @bendl, a pris vos conseils et a ajouté mon commentaire en tant que texte supplémentaire sur le message principal. – JakeofSpades

+0

Testez-vous dans un lecteur d'écran? En général, une classe sr-only masque simplement le texte. Votre page cachera vraisemblablement les boutons via l'affichage: none ou similaire, donc cela ne devrait pas entrer en conflit avec vos styles sr-only. Un exemple fonctionnel pourrait aider. – aardrian

Répondre

0

Je poste ma solution actuelle à ce problème. En aucun cas je ne pense que c'est la meilleure solution et j'apprécierai si vous prenez votre temps pour me montrer une meilleure manière. Voici ce que je l'ai fait sur ma page 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> 

Et dans mon code derrière

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 

Voici ce que ce code ressemble quand généré. Notez la <li> vide parce que visible est définie sur false pour 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

Mes jours .NET sont loin derrière moi, mais je sais que 'runat = server' résulte en HTML qui peut ne ressembler à rien de ce que vous y mettez. Pouvez-vous partager la sortie HTML? Par exemple, 'visible = false' ne génère-t-il aucun élément, un élément avec' display: none', un élément avec CSS 'visibility' set, ...? Ceux-ci peuvent tous entraîner des résultats différents. Ce que je peux voir jusqu'ici semble bon pourtant. – aardrian

+0

@aardrian Lorsque l'un des boutons est défini sur visible = false, c'est ce qui se produit. La liste

  • est vide de tout html. Je vais ajouter le résultat vu de dev-tools dans mon navigateur chrome, onglet sources. – JakeofSpades

    +0

    Je vois votre réponse mise à jour. et je pense que l'élément manquant est probablement la meilleure approche. – aardrian