0

仅当我添加文件输入时才显示错误。我在成功事件中返回 FALSE。仅在 Opera 中发生。

知道哪里有问题吗?

http://jquery.malsup.com/form/

4

2 回答 2

2

jQuery 创建一个隐藏的 IFRAME 来提交表单,因为这是以 AJAXy 方式处理文件上传的唯一方法。

这个问题的根本原因是当一个空的 iframe 被插入到文档中时 Opera 会触发 onload。jQuery 脚本没有预料到这个初始的 onload 事件,认为提交表单已经完成,并得出没有成功的结论。它在 http 上不容易发生的原因可能与 Opera 必须加密文件上传有效负载时的时间不同有关。

如果插入 IFRAME 的同一脚本也启动将文档加载到 IFRAME 中,则其他浏览器将等到加载文档完成加载并仅触发一个加载事件。(或类似的东西 - 在这种特定情况下,启动文档加载的脚本是从超时运行的,所以它甚至不是同一个脚本)。

我建议的解决方法是增强针对此问题已经存在的解决方法尝试:

if (!isXml && (doc.body == null || doc.body.innerHTML == ''  )) 

并在 if 语句中检查 IFRAME 中文档的 URL 是否仍然是初始 javascript:false :

if (!isXml && (doc.body == null || doc.body.innerHTML == '' || doc.URL=='javascript:false' )) 

这应该足以确保 jQuery 等到新文档完成加载。

于 2010-06-28T19:18:45.623 回答
1

迁移到 jQuery 1.5 和最后一个 jQuery Form 插件 (2.63) 后,这个问题看起来已经解决了

于 2011-02-08T07:37:52.700 回答