iOS 9上的Safari不会在隐藏的input文件上触发点击事件
我有一个网站上传字段,但input
隐藏display: none;
我有一个调用这个动作的div
。
它在iOS 8上工作,但是现在在iOS 9更新之后,当我在div中触摸时,没有任何反应。
我尝试使用[0].click()
.click [0].click()
或纯的VanillaJS像document.getElementById('file_input').click()
并没有什么作品。
所有这些方法都可以在iOS 5和iOS 8之间使用。
如果你想要,在JSFiddle上链接到这个例子: https ://jsfiddle.net/o1r265tz/6/embedded/result/
$(document).ready(function(){ $(document).on('click touchstart', '.upload-box', function(e){ e.stopPropagation(); $('.form-upload input.file-input').trigger('click'); $('.debug').append('<p>Clicked!</p>'); console.log('Clicked!'); return false; }); });
.upload-box { border: 3px solid #999; padding: 10px; text-align: center; border-radius: 5px; font-size: 35pt; font-family: Arial; color: #555; } .form-upload { display: none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="upload-box">Click here to upload =D</div> <form class="form-upload" enctype="multipart/form-data"> <input class="file-input" id="file_input" type="file"> </form> <div class="debug"></div>
有三件事导致这个问题:
-
在JavaScript,删除
return false;
的事件监听器。 -
在样式表中,调用动作的元素必须具有属性
cursor: pointer;
。 苹果可能会在这些要求中提出这个要求,以便在用户界面上获得最佳反馈。 -
再次在样式表中,我们不能设置
display: none;
对于隐藏的input,因为某些浏览器不接受对未显示的元素的点击。
链接到JSFiddle上的固定示例
将<input type="file"/>
放在伪button的顶部, position: absolute
和opacity: 0
。 您可能还需要设置正确的Z-索引,并使input100%的宽度和高度,以便捕捉button顶部的点击。
资料来源: https : //forums.meteor.com/t/webkit-on-ios-ignores-trigger-click-on-file-input/29828
尝试从JS文件中删除touchstart
事件或将其replace为mousedown
事件。
$(document).on('click', '.upload-box', function(e){ ... });
- WebApp使用webRTC在iOS浏览器和Android Chrome中实现跨平台video聊天
- 在iPad上运行Mobile Safari时即将切换的页面隐藏事件不会触发
- TypeError:尝试分配给只读属性。 在iOS8 Safari上
- 没有iOS的WebGL的交互式3D模型
- 移动Safari中的错误是否有解决方法:捏放大导致随机滚动阻塞?
- 检测浏览器是否支持embedded式媒体的自动播放 – YouTube playVideo()和iOS
- 实现500MB + WebSQL iOS Safari存储
- 将UIWebView限制到特定的URL(Swift)
- iPad IOS html表格select不会打开