2013-03-20 9 views
9

Pracuję nad tym kodem od jakiegoś czasu, próbując zmusić go do poprawnego działania. Chcę ograniczyć korzystanie z przesyłania więcej niż 2 obrazów.jQuery Plupload Ogranicz liczbę przesłań

Linia var upa = $('.uploader').plupload('getUploader'); to daje błąd w Uncaught TypeError: Object [object Object] ma metoda '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'); 
    }); 

Błąd jest generowany, kiedy przesyłać obrazy. Nie wiem, czego mi brakuje, ale wszelka pomoc w tym zakresie jest bardzo doceniana.

Odpowiedz

15

Co chcesz osiągnąć w bloku while (i<=upa.files.length) { nie jest dla mnie jasne. Wygląda na to, że masz na swojej stronie kilka przesyłających, ale nie mogę pojąć tego pomysłu.

W każdym razie, to powinno wystarczyć, aby ograniczyć maksymalnie do 2 plików w jednym przesyłającym.

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 
        } 
       }, 

nadzieję, że pomoże

+0

Jestem php nie facet facet JavaScript Właśnie rozpoczął pracę z JS i jQuery. Dostałem kod z ich forów. Ta edycja działała idealnie dzięki Twojemu wkładowi. –

7

dobra odpowiedź JBL. Zmieniłem trochę to rozwiązanie, aby było bardziej ogólne i aby przycisk "Dodaj pliki" pojawiał się ponownie w razie potrzeby.

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 jest częścią pluploadQueue ustawień

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

'up.settings.browse_button' zawiera id przycisku przeglądania. Musiałem dodać selektor id, żeby to działało. Tak więc użyj '$ ('#' + up.settings.browse_button) .hide();' – anfuerer

Powiązane problemy