7

我意识到这种问题的变化已经出现了很多次,但在这种情况下我找不到哪个回答这个问题。

我正在使用第三方文件上传器,它利用 jQuery 并在文件上传完成时提供成功回调。

我想要实现的是一个带有文本字段的表单以及文件上传器,当您单击“提交”时,它会触发上传功能(并且文件开始使用它的进度条上传),然后等待成功回调继续提交表格。

我必须立即承认,我是 jQuery 的一个彻头彻尾的白痴,它完全让我感到困惑,所以我非常不确定如何实现这一点。

到目前为止,我的尝试只会导致表单在文件上传过程中尝试立即提交。

manualuploader.uploadStoredFiles();单击“立即上传”按钮时会实例化该函数。

实例化文件上传器的jQuery如下:

<form action="index.php" method="post" enctype="multipart/form-data" id="uploader">
<div id="manual-fine-uploader"></div>
<div id="triggerUpload" class="btn btn-primary" style="margin-top: 10px;">
<input type="text" name="textbox" value="Test data">
<input name="test" type="button" value="Upload now">
</div>
</form>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="fineuploader-3.6.3.js"></script>
<script>
$(document).ready(function() {
var manualuploader = new qq.FineUploader({
        element: $('#manual-fine-uploader')[0],
        request: {
                endpoint: 'uploader.php'
        },
        autoUpload: false,
        text: {
                uploadButton: '<i class="icon-plus icon-white"></i> Select Files'
        }
        });
        $('#triggerUpload').click(function() {      
        manualuploader.uploadStoredFiles();
        });
});

</script>
4

1 回答 1

6

我注意到您正在使用 jQuery。为什么不使用Fine Uploader 的 jQuery 包装器

我会收听onComplete上传完成后触发的回调(成功与否)。当onComplete被触发时,我们使它submitForm()包含检查所有文件是否已成功提交的逻辑。

逻辑相对简单:如果我们没有正在进行的文件并且没有文件具有 a qq.statusFAILED那么我们可以继续提交表单。

另外,我会听onCancel回调以确保如果上传不成功并因此被取消,表单将提交。

还有很多回调。我建议阅读有关回调API 方法的 Fine Uploader 文档。此外,我会查看Fine Uploader jQuery docs

如果理解 jQuery 是您的问题,那么我建议您将其放在附近

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="fineuploader-3.6.3.js"></script>

<form action="index.php" method="post" id="uploader">
<input type="text" name="textbox" value="Test data">
    <div id="manual-fine-uploader"></div>
    <div id="triggerUpload" class="btn btn-primary" style="margin-top: 10px;">
    </div>
</form>



$(document).ready(function() {

    $("#triggerUpload").click(function () {
        $("#manual-fine-uploader").fineUploader('uploadStoredFiles'); 
    });

    function submitForm () { 
        if ($(this).fineUploader('getInProgress') == 0) {
            var failedUploads = $(this).fineUploader('getUploads', 
                { status: qq.status.UPLOAD_FAILED });
            if (failedUploads.length == 0) {    
                // do any other form processing here
                $("#uploader").submit();
            }
        }
    };

    // Instantiate a Fine Uploader instance:
    $("#manual-fine-uploader").fineUploader({
        autoUpload: false,
        request: {
            endpoint: "/uploads_bucket"
        }
    }).on("complete", function (event, id, name, response) {
        submitForm.call(this);
    }).on('statusChange', function (event, id, oldStatus, newStatus) {
        if (newStatus === qq.status.CANCELED) {
            submitForm.call(this);
        } 
    });
});

如果您还有其他我可以帮助的问题,请告诉我。

于 2013-06-07T17:24:19.587 回答