Javascript 如果条件未满足,如何取消/中止Dropzone.js中的上载?

Javascript 如果条件未满足,如何取消/中止Dropzone.js中的上载?,javascript,jquery,dropzone.js,Javascript,Jquery,Dropzone.js,我用它来上传文件。现在我想检查一个文件是否已填写,如果未填写,则取消上传 我的HTML代码: <input type="text" name="title" id="title" placeholder="Type the title of the album"> <form action="file-upload.cgi" enctype="multipart/form-data" class="dropzone" id="dropzoneform"></form

我用它来上传文件。现在我想检查一个文件是否已填写,如果未填写,则取消上传

我的HTML代码:

<input type="text" name="title" id="title" placeholder="Type the title of the album">
<form action="file-upload.cgi" enctype="multipart/form-data" class="dropzone" id="dropzoneform"></form>
#title
的长度为0时,我如何取消上载?

这怎么办

Dropzone.autoDiscover = false;
$('.dropzone').dropzone({
    acceptedFiles: 'image/jpeg',
    init: function() {
        var that = this;
        that.on('sending', function(file) {
            if ( $('#title').val().length <= 0 ) {
                that.removeFile(file);
            }
        }
    }
});
Dropzone.autoDiscover=false;
$('.dropzone').dropzone({
acceptedFiles:“图像/jpeg”,
init:function(){
var=这个;
that.on('sending',函数(文件){

如果($('#title').val().length如果您想完全删除文件,则接受的答案有效;但是,如果您想让用户选择尝试再次提交相同的文件,而不必将其重新添加到dropzone,则需要更改有关文件处理方式的一些内容

首先,在初始化dropzone时,需要将autoQueue属性设置为false:

$('.dropzone').dropzone({
    autoQueue: false,
    /* The rest of your configuration options */
});
这将防止Dropzone在用户添加每个文件后立即自动尝试上载该文件。这意味着您现在必须使用以下函数,以编程方式将文件排成队列:

 var yourDropzone = $('.dropzone');
 yourDropzone.on("addedfile", function(file) {
     if (/* some condition is met by your file */) {
         yourDropzone.enqueueFile(file);
     }
 }
这样,每当用户选择要上载的文件时,我们都可以检查是否满足某些任意条件。只有当满足此条件时,我们才会将文件排队以上载到服务器

这种方法的优点是,现在我们实际上可以选择何时上载文件,而不是在Dropzone尝试发送排队的文件时尝试将其从队列中删除


这还允许使用其他更高级的功能;例如,为每个文件添加一个按钮,让用户选择何时尝试并上载该文件。

如果接受答案的解决方案抛出此错误:

InvalidStateError:试图使用不可用或不再可用的对象

试试看

myDropzone.on("addedfile", function(file) {
if (/* some condition is NOT met by your file */) {
    myDropzone.removeFile(file);
}});

它是接受答案和ProtosSalio答案的混合。不排队文件。接受答案实际上在我的配置中抛出了这个js错误。

在声明dropzone时,您还可以捕获事件“addedfile”,这发生在发送任何内容之前。
示例:

jQuery("#media-uploader").dropzone({
    url: your_posting_url,
    acceptedFiles: 'image/jpeg',
    addedfile:function (file) {
        if( your condition ){
            // okay !
        } else {
            // not okay !
            this.removeFile(file);
        }
    },
    ... etc ...
});

您是否有在文件上载完成后触发的接收器函数?如果是,您可以在该函数中检查文件是否为空并执行必要的操作?您可以调用
.removeAllFiles()
.ref:@dreamwiever是的,我找到了这段代码,但我无法将其实现到我的中。诀窍是什么?你说不能是什么意思?这不是或取消/中止,就像问题询问一样。虽然这不完全回答问题,但它确实有我需要的。谢谢!对我来说,它确实取消并中止了上载。我完全复制了“初始化”partI必须将此事件侦听器放在dropzone的“init”属性中,并改为使用此.on(“addedfile”)。由于某些原因,在创建dropzone后引用该dropzone,然后侦听addedfile事件无法工作。除此之外,我还必须添加$('.dz image preview')。remove()在测试条件未通过后,从预览模板中删除预览div。如果出现错误,则此文件无法排队,因为它已被处理或被拒绝。
使用选项
enqueueForUpload:false
和函数
yourDropzone.processFile(文件)
如果使用“vue dropzone”并出现错误,则无法将此文件排入队列,因为它已被处理或被拒绝请尝试
此操作。$nextTick(()=>{This.$refs.dropzoneComponent.dropzone.enqueueFile(file);});
。它帮助了我
jQuery("#media-uploader").dropzone({
    url: your_posting_url,
    acceptedFiles: 'image/jpeg',
    addedfile:function (file) {
        if( your condition ){
            // okay !
        } else {
            // not okay !
            this.removeFile(file);
        }
    },
    ... etc ...
});