【问题标题】:Make upload file label accessible by spacebar and enter使空格键可以访问上传文件标签并输入
【发布时间】:2026-02-03 11:05:02
【问题描述】:

我正在尝试使用 Angular 2 创建一个可通过键盘访问的上传页面。我无法使用空格键启用“选择要上传的文件”并输入键。我可以通过单击标签上传文件。

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

输入显示为无,我使用标签允许用户选择要上传的文件。我尝试了 onkeypress、keyup 和 keydown,但我无法使其键盘可用于标签。

【问题讨论】:

  • plnkr.co/edit/UKuSKU5hg9bhakEHR32Y?p=preview 中使用制表符和空格似乎可以正常工作。
  • 没有。因为我使用 display:none 隐藏了默认选择文件。我只想让用户看到选择要上传的文件标签。
  • 如果您省略了问题的重要部分,您如何期望得到有用的答案。请提供允许重现您的问题并解释预期行为的代码。
  • 我表示“输入显示为无”。
  • 不看代码就很难解释。

标签: angular input keydown accessible


【解决方案1】:

我遇到了同样的问题;我刚刚在标签中添加了一个按键处理程序,以在按下空格键或回车键时触发点击它。

Here's a working Plunkr.

HTML(别忘了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)"/>

相关功能:

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

我这里使用的是 JQuery,但显然对于纯 JS 也很简单。

【讨论】: