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>