Javascript iOS 9上的Safari不会触发隐藏输入文件上的单击事件
我有一个带有上传字段的网站,但是Javascript iOS 9上的Safari不会触发隐藏输入文件上的单击事件,javascript,ios,safari,mobile-safari,ios9,Javascript,Ios,Safari,Mobile Safari,Ios9,我有一个带有上传字段的网站,但是输入隐藏在显示:无我有一个div来调用此操作 它在iOS 8上工作,但现在在iOS 9更新之后,当我触摸div时,什么也没有发生 我尝试过使用[0]。单击()或纯VanillaJS,如文档。getElementById('file\u input')。单击(),什么都不起作用 所有这些方法都在iOS 5和iOS 8之间工作 如果需要,请在JSFiddle上链接到此示例: $(文档).ready(函数(){ $(文档)。在('单击touchstart',上载框',
输入隐藏在显示:无
我有一个div
来调用此操作
它在iOS 8上工作,但现在在iOS 9更新之后,当我触摸div时,什么也没有发生
我尝试过使用[0]。单击()
或纯VanillaJS,如文档。getElementById('file\u input')。单击()
,什么都不起作用
所有这些方法都在iOS 5和iOS 8之间工作
如果需要,请在JSFiddle上链接到此示例:
$(文档).ready(函数(){
$(文档)。在('单击touchstart',上载框',函数(e){
e、 停止传播();
$('.form upload input.file input')。触发器('click');
$('.debug').append('单击!);
console.log('Clicked!');
返回false;
});
});代码>
。上传框{
边框:3px实心#999;
填充:10px;
文本对齐:居中;
边界半径:5px;
字号:35pt;
字体系列:Arial;
颜色:#555;
}
.表格上载{
显示:无;
}
单击此处上载=D
导致此问题的原因有三个:
在javascript中,删除返回false事件侦听器的代码>
在样式表中,调用动作的元素必须具有属性cursor:pointer代码>。也许苹果公司在这些呼吁中提出了这一要求,要求在用户界面上提供最佳反馈
同样在样式表中,我们不能设置display:none代码>用于隐藏输入,因为某些浏览器不接受对未显示元素的单击
尝试从JS文件中删除touchstart
事件,或将其替换为mousedown
事件
$(文档)。在('click','upload box',函数(e){
...
});代码>将
放在假按钮上方,位置为绝对和不透明度为0
有效。您可能还需要设置正确的z索引,并将输入设置为100%宽度和高度,以便它捕捉按钮顶部的单击
来源:很显然,这只是一个jQuery问题。本页显示它可以工作
触发器文件选择
问题不在于事件处理,正确的触发器是touchstart。当您尝试执行此操作时,会出现此问题。在事件处理程序内的输入文件字段上单击()。我删除了DisplayNone,并将光标指向输入类型文件的指针。ios中未发生任何事件:(:(
<input id="fileInput" type="file" style='display:none'/>
<button id="button" type="button" onClick="document.getElementById('fileInput').click()">trigger file selection</button>