Cómo hacer un ciclo para plupload múltiple

Tengo un código como ese:

$(function() { var uploader1 = new plupload.Uploader({ runtimes : 'gears,html5,flash,silverlight,browserplus', browse_button : 'pickfiles1', container : 'container', max_file_size : '10mb', url : 'upload.php', flash_swf_url : '/plupload/js/plupload.flash.swf', silverlight_xap_url : '/plupload/js/plupload.silverlight.xap', filters : [ {title : "Image files", extensions : "jpg,gif,png"}, {title : "Zip files", extensions : "zip"} ], resize : {width : 320, height : 240, quality : 90} }); uploader1.bind('Init', function(up, params) { $('#filelist1').html("
Current runtime: " + params.runtime + "
"); }); $('#uploadfiles1').click(function(e) { uploader1.start(); e.preventDefault(); }); uploader1.init(); uploader1.bind('FilesAdded', function(up, files) { var temp_img_name = ''; $.each(files, function(i, file) { $('#filelist1').append( '
' + file.name + ' (' + plupload.formatSize(file.size) + ') ' + '
'); if(temp_img_name == ''){ temp_img_name += file.name; } else { temp_img_name += ', ' + file.name; } }); $('#filelist1').append(''); up.refresh(); // Reposition Flash/Silverlight }); uploader1.bind('UploadProgress', function(up, file) { $('#' + file.id + " b").html(file.percent + "%"); }); uploader1.bind('Error', function(up, err) { $('#filelist1').append("
Error: " + err.code + ", Message: " + err.message + (err.file ? ", File: " + err.file.name : "") + "
" ); up.refresh(); // Reposition Flash/Silverlight }); uploader1.bind('FileUploaded', function(up, file) { $('#' + file.id + " b").html("100%"); }); });

Mi problema es que quiero crear un bucle porque algunas partes del código anterior deben cambiarse. De hecho, uploader1, filelist1, pickfiles1, uploadfiles1 deberían ser cambiados. Su último número debería boost de 1 a n. Intenté todo para crear un ciclo, pero parece que no funciona.

Además, este código se usa para controlar el PLupload

No pasó por toda la lógica, pero una opción debería ser (más o menos) algo como esto (para 10 cargadores), concatenar el itemIndex a cada selector. (tenga cuidado con el artículo del contenedor que no parece estar indexado)

En el lado del servidor, puede encontrar la necesidad de saber qué cargador activó la carga. Esto podría resolverse, por ejemplo, con parámetros querystring.

 $(function() { for (var itemIndex=1, itemIndex<10; itemIndex++) initUploader(itemIndex); }); function initUploader(itemIndex) { var uploader1 = new plupload.Uploader({ runtimes : 'gears,html5,flash,silverlight,browserplus', browse_button : 'pickfiles'+itemIndex, container : 'container'+itemIndex, max_file_size : '10mb', url : 'upload.php', flash_swf_url : '/plupload/js/plupload.flash.swf', silverlight_xap_url : '/plupload/js/plupload.silverlight.xap', filters : [ {title : "Image files", extensions : "jpg,gif,png"}, {title : "Zip files", extensions : "zip"} ], resize : {width : 320, height : 240, quality : 90} }); uploader1.bind('Init', function(up, params) { $('#filelist'+itemIndex).html("
Current runtime: " + params.runtime + "
"); }); $('#uploadfiles'+itemIndex).click(function(e) { uploader1.start(); e.preventDefault(); }); uploader1.init(); uploader1.bind('FilesAdded', function(up, files) { var temp_img_name = ''; $.each(files, function(i, file) { $('#filelist'+itemIndex).append( '
' + file.name + ' (' + plupload.formatSize(file.size) + ') ' + '
'); if(temp_img_name == ''){ temp_img_name += file.name; } else { temp_img_name += ', ' + file.name; } }); $('#filelist'+itemIndex).append(''); up.refresh(); // Reposition Flash/Silverlight }); uploader1.bind('UploadProgress', function(up, file) { $('#' + file.id + " b").html(file.percent + "%"); }); uploader1.bind('Error', function(up, err) { $('#filelist'+itemIndex).append("
Error: " + err.code + ", Message: " + err.message + (err.file ? ", File: " + err.file.name : "") + "
" ); up.refresh(); // Reposition Flash/Silverlight }); uploader1.bind('FileUploaded', function(up, file) { $('#' + file.id + " b").html("100%"); }); }