HTML input type="file"点击无响应问题及修复方案咨询
修复自定义样式的input type="file"点击无响应问题
嘿,我刚看完你的问题——点击那个带附件图标的上传按钮时完全没反应,只有hover变色,这问题其实很常见,核心原因是label和file input的关联没做好,咱们来快速搞定它:
问题根源
你的<label>标签用了for="file",但这个属性是用来绑定input的**id属性**,而不是name属性。看你的HTML代码,<input>只有name=file,没有id="file",所以点击label的时候,浏览器找不到对应的input元素,自然触发不了文件选择对话框。
修复步骤
1. 给input添加匹配的id
先修改你的HTML代码,给file input加上id="file",让它和label的for值对应上:
<div class=radioB> <input class=inputfile type="file" name=file id="file"> <label for="file" id=inputlabel><img src="style/iconos/attachment.png" width="30px"></label> </div>
这一步做完,点击label应该就能弹出文件选择窗口了。
2. (可选但推荐)优化选择器,适配多控件场景
如果以后你需要添加多个上传控件,用id选择器会很麻烦(因为id必须唯一),建议把label的id改成class,然后调整CSS选择器:
修改后的HTML:
<div class=radioB> <input class=inputfile type="file" name=file id="file"> <label for="file" class="inputlabel"><img src="style/iconos/attachment.png" width="30px"></label> </div>
修改后的CSS:
.inputfile{ width: 0.1px; height: 0.1px; opacity: 0; overflow: hidden; } .inputfile + .inputlabel { font-size: 1.25em; font-weight: 700; color: white; height: 40px; width: 45px; background-color: white; display: inline-block; float: left; margin-left: 0px; } .inputfile:focus + .inputlabel, .inputfile + .inputlabel:hover { background-color: antiquewhite; border-radius: 510px; } .inputfile + .inputlabel { cursor: pointer; /* "hand" cursor */ } .inputlabel img{ position: absolute; margin-left: 5px; padding-top: 3px; } .radioB .inputlabel{ padding-top: 9px; padding-bottom: 2px; position: relative; padding-left: 6px; border: 1px solid white; color: darkslategray; border-radius: 510px; border:1px solid black; }
这样以后再添加新的上传控件,只要给input设置不同的id,label的for对应上,就能复用这套样式了。
验证效果
改完之后,点击那个带附件图标的按钮,应该就能正常弹出文件选择对话框,hover时的颜色变化也能正常生效啦。
内容的提问来源于stack exchange,提问作者Jarvan Jarvencio




