2013-03-20 34 views
9

Ho lavorato su questo codice per un po 'di tempo ora cercando di farlo funzionare correttamente. Voglio limitare l'uso caricando più di 2 immagini in totale.jQuery Plupload limita il numero di caricamenti

La linea var upa = $('.uploader').plupload('getUploader'); esso dà un errore di Uncaught TypeError: Object [object Object] non ha alcun metodo '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'); 
    }); 

L'errore viene generato quando carico immagini. Non so cosa mi manca ma qualsiasi aiuto su questo è molto apprezzato.

risposta

15

Quello che si desidera ottenere nel blocco while (i<=upa.files.length) { non è chiaro per me. Sembra che tu abbia diversi caricatori sulla tua pagina, ma non riesco a cogliere l'idea.

In ogni caso, credo che questo dovrebbe fare il trucco, in quanto limitare a 2 file max in un singolo 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 
        } 
       }, 

Spero che questo vi aiuterà

+0

Io non sono un ragazzo php un ragazzo JavaScript Ho appena iniziato a lavorare con js e jQuery. Ho ottenuto il codice dai loro forum. Questa modifica ha funzionato perfettamente grazie per il tuo contributo. –

7

Buona risposta jbl. Ho ottimizzato leggermente la soluzione per renderla più generica e per riapparire il pulsante "Aggiungi file" quando necessario.

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 fa parte della pluploadQueue Impostazioni delle

$("#uploadBox").pluploadQueue({ 
    ... 
    max_files: 2, 
    ... 
}); 
+0

'up.settings.browse_button' contiene l'id del pulsante Sfoglia. Ho dovuto aggiungere un id-selector per farlo funzionare. Quindi, usa '$ ('#' + up.settings.browse_button) .hide();' – anfuerer

Problemi correlati