使用隐藏标签元素触发文件输入提示 - Safari
Posted
技术标签:
【中文标题】使用隐藏标签元素触发文件输入提示 - Safari【英文标题】:Trigger the file input prompt with a hidden label element - Safari 【发布时间】:2015-04-27 14:29:31 【问题描述】:我有代码:
<label name="xs" id="xs" for="fileselect">
<p class="add_atach">Test</p>
</label>
<input type="file" id="fileselect" name="fileselect[]" multiple="multiple" style="display:none;" />
如果我离开display:none;
点击什么都不会发生。如果我将其更改为visibility:hidden;
,代码可以工作,但元素占用的空间仍然存在。我该怎么办?
【问题讨论】:
【参考方案1】:现代浏览器会触发文件input
元素打开,即使元素被display: none
隐藏;但正如您所注意到的,这在 Safari 中不起作用。另外在IE8及以下也无法使用。
作为一种解决方法,这里有two alternative 解决方案,应该适用于所有情况。
最简单的选择是将元素的定位设置为fixed
,然后使用right: 100%
/bottom: 100%
的组合将其定位在屏幕之外。
Example Here
input[type="file"]
position: fixed;
right: 100%;
bottom: 100%;
您也可以使用 commonly used to visually hide content 的 CSS,但允许它对屏幕阅读器保持可见:
Example Here
input[type="file"]
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0,0,0,0);
border: 0;
这两个选项在不使用display: none
的情况下有效地隐藏了input
元素。
【讨论】:
以上是关于使用隐藏标签元素触发文件输入提示 - Safari的主要内容,如果未能解决你的问题,请参考以下文章
为啥 iPhone 的 Safari 不触发输入类型 = 文件的更改事件?
如果没有显示元素,jQuery'触发器('click')`不能处理opera