javascript - blueimp jquery上传: drag and drop submitting all file fields

标签 javascript jquery ajax jquery-file-upload

我在实现 Blueimp 的 Jquery 上传时遇到了一个小问题。

我有一个表单,其中包含几个用于上传的不同文件字段。

    <div id="file1">
    <input class="fileupload" type="file" name="files[]" data-url="jQueryFileUpload.php?pic=1">         
    <div  class="dropzone fade well" data-url="jQueryFileUpload.php?pic=1">Drop files here</div>
    <div class="progress">
        <div class="bar" style="width: 0%;"></div>
    </div>
    <input type="text" name="pic1"  id="pic1" value="">
</div>
<div id="file2">
    <input class="fileupload" type="file" name="files[]" data-url="jQueryFileUpload.php?pic=2">         
    <div  class="dropzone fade well" data-url="jQueryFileUpload.php?pic=2">Drop files here</div>
    <div class="progress">
        <div class="bar" style="width: 0%;"></div>
    </div>
    <input type="text" name="pic2"  id="pic2" value="">
</div>

<script>
$(function () {
$('.fileupload').fileupload({
    dataType: 'json',
    done: function (e, data) {
        $.each(data.result.files, function (index, file) {
            var fileName = file.name;
            var pic = file.pic;
           $('#pic'+pic).val(fileName);
         });
    },
    progressall: function (e, data) {
    var progress = parseInt(data.loaded / data.total * 100, 10);
    $('.progress').show();
    $('.progress .bar').css(
        'width',
        progress + '%'
    );

}
});
});
</script>

当用户使用浏览按钮选择文件时,它会将文件正确提交给上传文件处理程序脚本 jQueryFileUpload.php,包括文件字段的引用编号...

一旦处理程序脚本完成其图像处理工作,它会将文件名和相关文件编号传递回 javascript 函数,并将文件名添加到文本字段...每个文件上传都有自己的文本字段(图片 1、图片 2 等)。

这一切都很好。

我的问题是,如果用户将文件拖放到拖放区,所有文件字段都会随拖放文件一起提交。

如果我使用浏览按钮,我会在 firebug 中看到对上传处理程序页面的单个 ajax 调用。 如果我拖放我会看到多个调用:

jQueryFileUpload.php?pic=1
jQueryFileUpload.php?pic=2

并且所有的文本字段都填写了文件名。

我如何指定触发哪个降落区? 或者,最坏的情况是,我怎样才能完全禁用拖放?

对于后者我尝试添加

$(document).bind('drop dragover', function (e) {
e.preventDefault();
});

根据文档,但这似乎没有任何效果.. 丢弃的文件仍在上传...

最佳答案

要完全禁用拖放,设置 dropZone option调用 fileupload() 中的空 jQuery 集合:

$('.fileupload').fileupload({
    dropZone: $(),
    ...
});

创建multiple dropzones ,每个都有自己的拖放上下文,遍历 .fileupload 输入,并在每个输入上调用 fileupload(),将其作为自己的拖放区传递:

$('.fileupload').each(function () {
    $(this).fileupload({
        dropZone: $(this)
    });
});

关于javascript - blueimp jquery上传: drag and drop submitting all file fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31548675/

相关文章:

javascript - html5 Canvas strokeStyle?

javascript - jQuery 提示和技巧

javascript - 无法调用在 javascript 中声明的函数

javascript - 如何使用 Rails 5 + jQuery 保持通过 Turbolinks 提交的页面状态

javascript - 如何为 "rewind"创建字形,其中的秒数具有动态值?

javascript - 使用 Javascript 进行页面部分导航

javascript - 将 native 浏览器事件对象转换为 jQuery 事件对象

php - jQuery 连接可排序列表,将订单保存到 MySQL

javascript - 如何访问另一个网页中的一个php变量

java - 没有通过ajax从servlet获取html响应