无法打开标签内带有按钮的文件对话框

Tar*_*gar 3 html css

为了隐藏(但保留功能)文件对话框中丑陋的默认输入类型文件按钮,我使用了以下机制:

HTML:

    <label for="file-input">
        <i class="fa fa-edit"></i> <!-- acts as file input on click-->
    </label>
    <input type="file" id="file-input" />
Run Code Online (Sandbox Code Playgroud)

CSS:

#file-input {
    display: none; //hide the file input
}
Run Code Online (Sandbox Code Playgroud)

这符合预期:我单击 font Awesome 编辑图标,然后弹出文件对话框。

但是,当我使用按钮时,它会停止工作。单击按钮时没有看到文件对话框:

    <label for="file-input">
        <button type="button">Upload file</button> <!-- not working-->
    </label>
    <input type="file" id="file-input" />
Run Code Online (Sandbox Code Playgroud)

Nat*_*han 7

标签表示用户界面中项目的“标题”。按钮不起作用的原因是按钮不被视为“控制”元素的有效“标题”,因为它是“控制”元素。(参见: https: //developer.mozilla.org/nl/docs/Web/HTML/Element/label

如果您在标签内使用图像或一段文本,它将起作用,因为这将被视为标题(这就是您第一次尝试成功的原因)。如果您想创建自定义按钮,您可以使用一些文本或图像标签,否则您将需要一些 JavaScript。

编辑:也许这个页面可以提供帮助:http://webmuch.com/how-to-customize-a-file-upload-button-using-css3-html5-and-javascript/ 他们使用的 javascript 向用户显示什么他选择的文件