开始编辑
在第一种情况下,您在 jQuery 对象上触发 jQuery 提交事件(请参阅http://api.jquery.com/submit/)
在第二种情况下,您在 javascript 对象上调用 javascript submit 方法。它不会触发提交事件。
两种情况下的“提交”都不相同。
在第二种情况下,如果您更换:
$('form')[0].submit();
和
$($('form')[0]).submit();
您还将以无限循环结束。
结束编辑
实际上,使用plupload,关键是等待您能够成功提交表单的时间。主要功能是订阅 StateChanged 事件。
它是这样工作的:
1-首先检查队列是否为空。如果是,验证表单提交(返回 true)
2-如果队列不为空
a- 启动加载剩余文件 b- 订阅未来的“StateChanged”事件,它将检查队列。如果那个时候是空的,转到第1步会成功(因为那个时候队列是空的) c - 取消表单提交(队列当前不是空的)
一些带有注释的代码:
// Client side form validation
$('form').submit(function(e) {
var myForm = e.currentTarget;
var uploader = $(item).pluploadQueue();
// if files in queue upload them first. Cancel current form submission.
// Subscribe to 'StateChanged' to check if the queue is empty and try
// a new submission, each time a file is finished uploading
if (uploader.files.length > 0) {
// When all files are uploaded submit form
uploader.bind('StateChanged', function() {
if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) {
myForm.submit(); //
}
});
// start uploading remaining files.
// End of each upload will trigger the 'StateChanged'
uploader.start();
// there are files in queue. (the reason we are running current block)
// Cancel current form submission
return false;
}
return true; // the queue is empty, validate current form submission
});
希望这会有所帮助