1

提交表单时,我尝试使用 id 提交表单并通过 JQuery 在其上调用提交,但当然,第一个脚本让我陷入无限循环。

使用plupload后,我注意到他们使用另一种方式提交表单,这不会导致无限循环。

我试图找到有关此的信息,但我似乎无法获得有关此的具体信息?

$('#test').submit(function(e) {
   alert("here");
   $('#test').submit();
   return false;
});

$('form').submit(function(e) {
   alert("here");
   $('form')[0].submit();
   return false;
});
4

1 回答 1

0

开始编辑

在第一种情况下,您在 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
    });

希望这会有所帮助

于 2012-06-28T15:50:54.680 回答