如何防止页面重新加载,直到在Safari中上传文件

时间:2015-01-09 15:51:41

标签: javascript forms file-upload safari submit

我有加载程序,它可以在除safari之外的所有浏览器中正常工作 这是我的代码:

<a href="#" onclick="setTimeout($.loader({className:'blue-with-image-2',content:''}),0); document.myform.submit();return false;"></a>

所以,在所有浏览器中一切正常,但在safari页面重新加载而不显示加载器。我搜索了很多信息,并尝试过这样的解决方法:

 <a href="#" onclick="setTimeout($.loader({className:'blue-with-image-2',content:''}),0); setTimeout(document.myform.submit(), 200);return false;"></a>

但它不合适,因为,f.e。在IE加载器中只能旋转200ms(它就像圆圈的一半),所以设置超时几秒钟会使加载器旋转一段时间,但这是不合适的(如果用户想要上传500mb文件并且加载器只旋转2秒钟会怎样然后等到页面重新加载)。 所以我需要一个可以在所有浏览器中使用的工作解决方案。

2 个答案:

答案 0 :(得分:0)

您正在使用超时协调异步进程,这是一个坏主意。您无法通过人工超时来同步异步组件。

摆脱超时的一种方法是使用FileReader Interface of the Html5 FileAPI。这样您就可以专门处理上传操作的开始和结束,而不必依赖setTimeout

理想情况下,您将在上传操作之前开始显示加载程序,并在成功或错误处理程序中隐藏加载程序。

答案 1 :(得分:0)

如果没有错,您正尝试使用锚点击提交表单。并希望在文件上传完成之前显示加载程序。我发现你已经在页面中使用了jquery。那么为什么不能只在锚元素(示例中提到的根)上添加一个事件监听器并添加两个函数 显示装载机, 2.(稍后)通过添加另一个等待上传事件被发射的支票来提交其中的表格。

所以更详细一点,当用户点击锚点时它会显示加载器,你将为fileupload添加一个eventlistener,你可以参考这个文档https://github.com/blueimp/jQuery-File-Upload/wiki/Options,一旦事件完成,你可以触发提交事件在表格上。