Reputation: 2300
I'm using the bluimp jQuery-File-Upload-plugin . It's no problem to select some files and upload them, but when I want to upload another files without refreshing the page, the first ones are getting uploaded again. My question is how can I "unset" files after they are uploaded. Here is my sourcecode
Javascript:
$('#MappeFile').fileupload({
dataType : 'json',
autoUpload : false,
maxNumberOfFiles : undefined,
maxFileSize : 6000000,
minFileSize : undefined,
acceptFileTypes : /.+$/i,
url : "/ajax/UploadFile.php",
add : function(e, data) {
$("#testUploadButton").on("click", function() {
$('#progress .bar').show();
if ($.browser.msie && parseInt($.browser.version, 10) < 10) {
$('#progress .bar').css({
"background" : "url(images/progressbar.gif) no-repeat",
"width" : "100%"
})
} else {
$('#progress .bar').css({
'background-color' : "#2694E8",
'width' : '0%'
});
}
data.submit();
})
},
change : function(e, data) {
$.each(data.files, function(index, file) {
console.info('Selected file: ' + file.name);
filesCount++;
});
},
drop: function(e, data) {
$.each(data.files, function(index, file) {
console.info('Selected file: ' + file.name);
filesCount++;
});
},
done : function(e, data) {
$.each(data.result, function(index, file) {
vOutput = "<tr>";
vOutput += "<td>" + file + "</td>";
vOutput += "<tr>";
$("#MappeFileListe").append(vOutput);
filesUploaded++;
if (filesCount == filesUploaded) {
filesUploaded = 0;
filesCount=0;
$('#progress .bar').hide();
}
});
},
progressall : function(e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress .bar').css('width', progress + '%');
}
});
HTML:
<div id="KundeMappe">
<form id="MappeFile">
<input type="file" id="MappeFileSelect" name="files[]" data-url="ajax/UploadFile.php" multiple/>
<div id="progress">
<div class="bar" style="width: 0%;"></div>
</div>
<input type="button" class="neuButton" value="upload" id="testUploadButton"/>
</form>
<table id="MappeFileListe"></table>
</div>
Upvotes: 12
Views: 10486
Reputation: 41
The same problem when I faced, I resolved it by using one() in place of on(). The add function can be written as:
add : function(e, data) {
$("#testUploadButton").one("click", function() {
$('#progress .bar').show();
if ($.browser.msie && parseInt($.browser.version, 10) < 10) {
$('#progress .bar').css({
"background" : "url(images/progressbar.gif) no-repeat",
"width" : "100%"
})
} else {
$('#progress .bar').css({
'background-color' : "#2694E8",
'width' : '0%'
});
}
data.submit();
})
}
The .one() method is identical to .on(), except that the handler for a given element and event type is unbound after its first invocation.
Here is more about one(): https://api.jquery.com/one/
Upvotes: 1
Reputation: 141
I had a similar problem where previously uploaded files were included in the next upload. You can try following solution below:
On Add Function just add "change" event of the file input element like below:
$('#YourFileUploadElementId').change(function(e) {
data.files.splice(0); // Clear All Existing Files
});
Full Example Below:
$('#YourFileUploadElementId').fileupload({
// Some options
add: function (e, data) {
$('#YourFileUploadElementId').change(function(e) {
data.files.splice(0); // Clear All Existing Files
});
},
// Other Events
});
Note: Just change the YourFileUploadElementId to your file upload element id.
Here is the complete example on jsfiddle.net
http://jsfiddle.net/dustapplication/cjodz2ma/5/
Upvotes: 2
Reputation: 2300
I found the answer myself - It's enough to unbind the click event of the button after upload:
add : function(e, data) {
$("#testUploadButton").on("click", function() {
$('#progress .bar').show();
if ($.browser.msie && parseInt($.browser.version, 10) < 10) {
$('#progress .bar').css({
"background" : "url(images/progressbar.gif) no-repeat",
"width" : "100%"
})
} else {
$('#progress .bar').css({
'background-color' : "#2694E8",
'width' : '0%'
});
}
data.submit();
$("#testUploadButton").off("click")
})
},
Upvotes: 22