2017-03-08 1 views
3

J'ai une application angular2 et je lie un texte dynamique à ARIA-LABEl pour un DIV imbriqué. Mais quand j'utilise le lecteur JAWS pour localiser des DIVs sur la page, il ne lit pas le texte assigné. C'est le texte que j'essaie de lire - attr.aria-label = "Détails du produit pour {{productDetails? .ProductName}} "DIV ARIA-LABEl n'étant pas lu par JAWS

aussi, si je donne attribuer un rôle de la position à ce div, il lit le texte dynamique, mais ne préfixe pas « détails du produit » avant que le texte

<div [ngClass]="getDescClass()" class="prdDetails-div" aria-label="some text"> 
<div autofocus attr.aria-label="Product details for {{productDetails?.ProductName}}" class="productDetails-name" style="cursor:default!important" role="heading" >{{productDetails?.ProductName}} </div> 
     <div autofocus class="products-result-compare"> 
      <!--{{getDescription(productDetails?.Description)}}--> 
      Small description 
     </div> 
+0

De plus, si je donne un rôle d'en-tête à ce div, il lit le texte dynamique mais ne contient pas le préfixe "Détails du produit pour" avant le texte. – namrata

+0

Qu'est-ce que vous essayez de faire ici - que voulez-vous lire à la fin de la journée? Pour ce que cela vaut, avec les implémentations actuelles, aria-label ne se comporte pas comme un mécanisme général de remplacement de texte. Cela fonctionne mieux lorsqu'il est utilisé sur des éléments qui prennent naturellement des étiquettes, mais peut ou peut ne pas fonctionner sur d'autres types d'éléments (DIV, SPAN) à moins qu'ils aient tabindex ou un rôle spécifique spécifié. – BrendanMcK

+0

Merci beaucoup pour votre réponse. Je suis assez récemment à l'interface utilisateur et l'accessibilité. Je ne savais pas que les labels aria div et tag ne sont pas lus. Mon scénario est ceci: j'ai du texte dans DIV. (Disons que le texte est "DELL"). Mais je veux que le lecteur d'écran le lise comme "Nom du produit est DELL". Fondamentalement, je veux préfixer le "Nom du produit est" uniquement pour le lecteur de la parole et non dans l'interface utilisateur. Je ne veux pas spécifier tabindex pour ces DIVs. – namrata

Répondre

5

Votre description ne dispose pas de détails ou d'un travail par exemple, donc au lieu d'essayer d'offrir une solution tout ce que je peux offrir est la suivante: aria-label ne fonctionne pas sur <div> ni <span>.

A <div> et <span> ne sont pas des repères ni un contenu interactif. Un aria-label ne sera pas lu par un lecteur d'écran (et à juste titre).

Sans connaître l'utilisation, j'ai deux suggestions qui pourraient aider:

  1. Mettez le aria-label directement sur le contrôle (le savoir remplace le texte du contrôle).

  2. Utilisez un texte hors écran si vous voulez qu'il soit rencontré seulement par les utilisateurs du lecteur d'écran.

Utiliser une technique hors écran:

<div class="sr-only"> 
Here be redundant or extraneous content 
</div> 

Le CSS pourrait ressembler à ceci (comptabilité pour les langues RTL aussi):

.SRonly { 
    position: absolute !important; 
    clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ 
    clip: rect(1px, 1px, 1px, 1px); 
    top: auto; 
    left: -9999px; 
    width: 1px; 
    height: 1px; 
    overflow: hidden; 
} 

html[dir=rtl] .SRonly { 
    left: inherit; 
    left: unset; 
    right: -9999px; 
} 

There are other techniques, mais leur valeur dépend de votre public et son profil technologique.

Votre utilisation de autofocus sur ceux <div> me rend nerveux. J'espère que vous ne les utilisez pas comme contrôles interactifs (comme les boutons). Idéalement never use a div as interactive content.

+0

Merci beaucoup pour votre réponse. Je suis assez récemment à l'interface utilisateur et l'accessibilité. Je ne savais pas que les labels aria div et tag ne sont pas lus. Mon scénario est ceci: j'ai du texte dans DIV. (Disons que le texte est "DELL"). Mais je veux que le lecteur d'écran le lise comme "Nom du produit est DELL". Fondamentalement, je veux préfixer le "Nom du produit est" uniquement pour le lecteur de la parole et non dans l'interface utilisateur. J'ai essayé d'utiliser l'approche que vous avez mentionnée ci-dessus. Cela semble fonctionner.Mais je voulais juste vérifier si c'est la bonne façon de gérer ce problème? Ou y a-t-il d'autres approches à suivre? – namrata

+1

Si le contexte est clair à partir de la structure de la page ou du contenu environnant, comme il pourrait y avoir un titre qui dit "Produits", je ne m'inquiéterais même pas d'ajouter "Le nom du produit est". Beaucoup d'efforts bien intentionnés finissent par rendre une page un peu trop verbeuse pour les utilisateurs de lecteurs d'écran. En bref, cela pourrait ne pas être un problème que vous devez résoudre. – aardrian