2017-03-07 4 views
0

J'essaie de créer une page de téléchargement accessible au clavier en utilisant angulaire 2. J'ai du mal à activer "Choisir un fichier à télécharger" en utilisant la barre d'espace et entrer les touches. Je suis capable de télécharger des fichiers en cliquant sur l'étiquette.Rendez l'étiquette de fichier de téléchargement accessible par la barre d'espace et entrez

<label for="files" > Choose a file to upload </label> 
<input type="file" id="files" (click)="upload($event)"/> 

L'affichage de l'entrée est aucun et j'utilise l'étiquette pour permettre aux utilisateurs de choisir le fichier à télécharger. J'ai essayé onkeypress, keyup et keydown mais je ne suis pas capable de rendre le clavier accessible pour l'étiquette.

+0

Cela semble fonctionner correctement dans https://plnkr.co/edit/UKuSKU5hg9bhakEHR32Y?p=preview avec onglet et espace. –

+0

Non. Parce que je cache le fichier choisi par défaut en utilisant display: none. Je veux juste que les utilisateurs voient Choisir un fichier pour télécharger l'étiquette. –

+0

Comment vous attendre une réponse utile si vous omettez des parties essentielles de votre question. Veuillez fournir le code qui permet de reproduire votre problème et d'expliquer le comportement attendu. –

Répondre

0

J'ai eu le même problème; Je viens d'ajouter un gestionnaire de touches à l'étiquette pour déclencher un clic si l'espace ou la touche Entrée est enfoncé.

Here's a working Plunkr.

HTML (ne pas oublier le tabindex="0"):

<label class="btn" for="files" tabindex="0" (keypress)="onUploadLabelClick($event)">Choose a file to upload</label> 
<input class="hiddenFileUpload" type="file" id="files" (click)="upload($event)"/> 

fonction pertinente:

onUploadLabelClick(evt): void { 
    var keyCode = evt.which || evt.keyCode; 
    if (keyCode === 13 || keyCode === 32) { 
     $(evt.target).click(); 
     evt.preventDefault(); 
    } 
} 

J'utilise JQuery ici, mais il est assez simple de faire la même chose avec JS pur évidemment.