问题
I have been working on this code for some time now trying to get it to work properly. I want to restrict the use from uploading more that 2 images in total.
The line var upa = $('.uploader').plupload('getUploader');
it giving an error of Uncaught TypeError: Object [object Object] has no method 'plupload'
var maxfiles=2;
$('.uploader').each(function(){
var $uploader = $(this);
$uploader.pluploadQueue($.extend({
runtimes: 'html5,flash,html4',
url : '../admin/extras/upload.php',
max_file_size : '2mb',
chunk_size : '2mb',
unique_names : true,
filters : [
{title : "Image files", extensions : "jpg"}
],
resize : {width : 800, height : 600, quality : 90},
flash_swf_url : 'js/mylibs/forms/uploader/plupload.flash.swf',
init : {
FilesAdded: function(up, files) {
plupload.each(files, function(file) {
if (up.files.length > maxfiles) {
up.removeFile(file);
}
var upa = $('.uploader').plupload('getUploader');
var i = 0;
while (i<=upa.files.length) {
ultimo = upa.files.length;
if (ultimo > 1) {
if (i > 0) {
ultimo2 = ultimo - 1;
ii = i-1;
if (ultimo2 != ii) {
if (up.files[ultimo - 1].name == upa.files[i-1].name) {
up.removeFile(file);
}
}
}
}
i++;
}
});
if (up.files.length >= maxfiles) {
$('#uploader_browse').hide("slow");
}
},
FilesRemoved: function(up, files) {
if (up.files.length < maxfiles) {
$('#uploader_browse').fadeIn("slow");
}
}
}
}));
$uploader.find('.plupload_button').addClass('button grey btn');
$uploader.find('.plupload_add').addClass('icon-plus');
$uploader.find('.plupload_start').addClass('icon-ok');
});
The error is generated when i upload images. I don't know what I am missing but any help on this is greatly appreciated.
回答1:
What you want to achieve in the while (i<=upa.files.length) {
block is not clear to me. Seems like you have several uploaders on your page, but I can't grasp the idea.
Anyway, I guess this should do the trick, as to restrict to 2 files max in a single uploader.
FilesAdded: function(up, files) {
var maxfiles = 2;
if(up.files.length > maxfiles )
{
up.splice(maxfiles);
alert('no more than '+maxfiles + ' file(s)');
}
if (up.files.length === maxfiles) {
$('#uploader_browse').hide("slow"); // provided there is only one #uploader_browse on page
}
},
Hope this will help
回答2:
Good answer jbl. I tweaked your solution a bit to make it more generic, and to make the 'Add files' button reappear when needed.
uploader.bind('FilesAdded', function(up, files) {
if (up.files.length >= up.settings.max_files) {
up.splice(up.settings.max_files);
$(up.settings.browse_button).hide();
}
});
uploader.bind('FilesRemoved', function(up, files) {
if (up.files.length < up.settings.max_files) {
$(up.settings.browse_button).show();
}
});
max_files
is part of the pluploadQueue settings
$("#uploadBox").pluploadQueue({
...
max_files: 2,
...
});
来源:https://stackoverflow.com/questions/15513689/jquery-plupload-restrict-number-of-uploads