gpt4 book ai didi

javascript - 为 jQuery-File-Upload 实现删除按钮

转载 作者:行者123 更新时间:2023-11-29 15:36:49 24 4
gpt4 key购买 nike

我可能以完全错误的想法来处理这个问题,所以让我先解释一下我的情况。

我试图使用 jQuery-File-Upload 实现的是允许用户选择他们选择上传的文件。他们将被允许选择多个文件。现在什么类型并不重要,但他们主要是上传图片。所选文件将出现在列表中,每个文件的文件名右侧都有一个“删除”按钮。如下图。

Basic setup of jQuery-File-Upload

我如何实现允许用户从等待上传的文件列表中删除他们选择的文件的方法?

一旦用户对他们选择的文件感到满意,他们将单击“开始上传”按钮,该按钮将开始上传列表中包含的文件并触发如上图所示的进度条。

我自己尝试了一些故障排除,包括注销单击按钮时发生的事件,但无法设法将其从选择上传的文件列表中删除。我知道有一个 drop 回调,但我不确定我是否应该使用它。

下面是我的代码。

$(function () {
$('#fileupload').fileupload({
dataType: 'json',
url: '../php/',
add: function (e, data) {
//$.each(data.files, function(index, file) {
data.context = $('<li class=\"list-group-item\">')
//.html(file.name+"<button type=\"button\" id=\"drop\" class=\"btn btn-danger btn-xs pull-right\"><span class=\"glyphicon glyphicon-remove\"></span></button>")
// see https://stackoverflow.com/questions/26234279/blueimp-jquery-upload-multiple-files-doesnt-work for the reason for the line below
.html(data.files[0].name+"<button type=\"button\" id=\"drop\" class=\"btn btn-danger btn-xs pull-right\"><span class=\"glyphicon glyphicon-trash\"></span></button>")
.appendTo(".list-group");
/*$('.btn-danger').on('click', function() {
console.log('Drop '+file.name+' \n');
});*/
//});
$('.btn-danger').on('click', function(e, data) {
//console.log("Removing all objects...\n");
//data.context.remove(data.files[0].name);
//data.context.remove(data.files[0]);
e.preventDefault();
/*var filename = $(this).parent().text();
console.log("Filename: "+filename);
data.context.remove(data.files.filename);
console.log("Clicked the drop button");*/
try { // here I try thinking that I can call the drop() callback but I'm still trying to wrap my head around how this all works.
drop(e, data);
} catch(error) {
console.log("The error was: "+error);
}
});


},
submit: function (e, data) {
$('#start-upload').on('click', function() {
//$('#start-upload').addClass('#disabledInput');
console.log("This is the start upload button!");
});
},
done: function (e, data) {
/*$.each(data.result.files, function (index, file) {
$('<p/>').text(file.name).appendTo('.files').find('#panel-body');
});*/
},
progressall: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress .bar').css(
'width',
progress + '%'
);
},
drop: function (e, data) {
$.each(data.files, function (index, file) {
//$('.btn-danger').on('click', function() {
console.log('Dropped file: '+ file.name +'\n');
//});
});
}
}).on('.fileuploadsubmit', 'click', function(e, data) {
console.log("Submit button pressed.");
//data.formData = data.context.find(':input').seralizeArray();
});
});

最后,所有这些都应该放在我的 $(document).ready 中吗?

我意识到这可能是 this post 的重新发布但这是两个问题合二为一的问题,在这里我想将其分割为更小的问题。

最佳答案

通过点击事件中止上传

首先我需要告诉你,我已经构建了与你类似的东西。达到这一点后,我问自己同样的问题并最终来到这里。不幸的是,我不得不自己解决它。

您的基本问题是您正在为点击事件 (function(e, data)) 使用方法签名,它将覆盖包含添加方法的签名 (function(e , 数据)).因此,当您尝试删除数据上下文时,您实际上是在更改点击事件的数据。因此,只需将变量(或重命名)保留在点击事件中,因为在您的示例中您不需要它们。

这样做之后,您最终会尝试彻底“销毁”上传。我想通了,首先中止它们并禁用任何以后的提交是干净的。

这是一个工作代码示例,它应该适合您的需要,并且有一些不言自明的注释:

add: function (e, data) {

// Append data context to collection.
data.context = $('<li class="list-group-item">'+data.files[0].name+'<button class="btn btn-danger btn-xs pull-right"><i class="glyphicon glyphicon-trash"></i></button>')
.appendTo('.list-group');

// Search in the children of the data context for the button
// and register the click event.
data.context.children('button')
.click(function () {
// This button will be disabled.
$(this).addClass('disabled');
// Abort the data upload if it's running.
data.abort();
// Overwrite the plugin's default submit function.
data.submit = function () { return false; };
// Optional: Remove the data context (thus from collection).
//data.context.remove();
})
;

},

附加提示:不要对 JavaScript 使用双引号,因为您需要在 HTML 标记中对它们进行转义。

如何加载 JavaScript

这个问题比你想象的要复杂得多。这是关于一致性/干净 HTML 标记与页面加载的永无止境的讨论。选择一个方向时,您最终会在Onload-events和jQuery之间进行另一种选择。您应该打开另一个问题或尝试找到相关问题。这样做时,我同意将您的脚本放在一个干净的匿名函数中,该函数会在文档准备好后自动加载:$(function() {/*yourcontent*/});

关于javascript - 为 jQuery-File-Upload 实现删除按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27476913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com