提交表单时,我尝试使用id提交表单并通过JQuery调用提交,但是当然,第一个脚本让我处于无限循环中。
使用plupload后,我注意到他们使用另一种方式提交表单,这不会导致无限循环。
我试图找到有关此内容的信息,但我似乎无法获得有关此内容的具体信息?
$('#test').submit(function(e) {
alert("here");
$('#test').submit();
return false;
});
$('form').submit(function(e) {
alert("here");
$('form')[0].submit();
return false;
});
答案 0 :(得分:0)
在第一种情况下,您将在jQuery对象上触发jQuery submit事件(请参阅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
});
希望这会有所帮助