使用.click()模拟文件输入单击在iOS中不起作用 - Cordova

时间:2017-01-19 20:59:38

标签: javascript jquery ios cordova reactjs

我正在使用React构建一个用Cordova包装的网络应用程序,成为android / iOS上的本机应用程序。我在使用专门的iOS时遇到了问题,特别是模拟了对.click()

的文件输入的点击

我正在使用此库:https://github.com/odysseyscience/react-s3-uploader

这是我的代码,非常简单:

<button onClick={(e) => { e.preventDefault() $('#fileinput').click() }} className='btn btn--no-bg btn--w-icon uploader'>

标识为fileinput的元素是反应上传器的呈现版本,但在纯HTML中如下所示:

<input type="file" id="fileinput" class="hidden react-s3" accept="image/*">

我做了一堆测试,问题出现在.click() jquery事件中。肯定会触发第一个onClick,但在调用$('#fileinput').click()时没有任何事情发生(在iOS中)。

这部分代码在Web浏览器和我的Android模拟器中工作,但在我的iOS模拟器中再次

当我进入所有三种环境(桌面,iOS,Android)的控制台,并在控制台中运行代码$('#fileinput').click()时,点击输入并触发Android和桌面的照片选择,但是iOS上没有任何功能。

我做了大量的研究,我发现一些不起作用的解决方案是:向按钮或输入添加pointer: cursor,将button更改为a标记,在隐藏的输入上将display:none更改为visibility: hidden,并尝试找到.click()的所有不同版本(vanillaJS,.trigger.touchstart,{{1} },.touchend等。)

1 个答案:

答案 0 :(得分:1)

我有同样的问题,这很有效:

$('#fileinput').trigger("click"); 

并且不要隐藏文件输入,而是将其从屏幕上删除,如:

#fileinput {
    position:absolute;
    top:-9999px;
}

我认为你不能触发iOS中隐藏元素的点击