2013-05-02 26 views
6

Tôi chỉ có biểu mẫu bình thường với một số trường nhập và một trường nhập tệp. Tôi sử dụng plugin Tải lên tệp Jquery của Blueimp để tải lên tệp. Dường như hoạt động, nếu bạn chọn một tệp và sau đó nhấp vào nút tải lên. Nhưng nếu bạn chọn lại các tệp để tải lên, nó sẽ lưu tất cả tiền sử của các lựa chọn và sau khi tải lên sẽ gửi tất cả các XHR đến máy chủ.Tại sao Tải lên tệp JQuery của Blueimp thêm tất cả ưu tiên. các tệp được chọn ngay cả khi các tùy chọn [replaceFileInput: false] và [maxNumberOfFiles: 1] được đặt trên init?

Tôi chỉ muốn tải lên một tệp hiện được chọn, không phải tất cả các tệp đã chọn trước đó (trong hộp thoại mở tệp).

Dưới đây là mô-đun js của tôi để xử lý các tải lên:

$(function() { 
    $('#upload_form').fileupload({ 

     dataType: 'json', 
     autoUpload: false, 
     fileInput: '#filechose_button', 
     replaceFileInput: false, 
     maxNumberOfFiles: 1, 
     multipart: true, 

     add: function (e, data) { 

      $('#upload_button').click(function() { 

       $('#upload_button').attr('disabled', true); 
       ... 
       data.submit(); 
       ... 
      }); 
     }, 

     done: function (e, data) { 
      ... // successfully uploaded 
     }, 

     progressall: function (e, data) { 
      ... // update a progress bar 
     } 
    }); 
}); 

Các giải pháp tôi tìm thấy ở đây (How to upload a file only once with blueimp file upload plugin?) có vẻ là không phải là cách tốt nhất (tôi xem nó như là bẩn), bởi vì chỉ unbinding các nhấp chuột sự kiện vẫn không giải quyết được vấn đề thu thập tất cả các tệp đã chọn trước đó (loại rò rỉ bộ nhớ)

Tùy chọn maxNumberOfFiles: 1 không hoạt động đối với tôi.

+0

không có "rò rỉ bộ nhớ". Hãy thử thêm 2 tệp và trước khi bạn tải chúng lên, hãy xóa một trong số chúng khỏi hệ thống tệp. Tệp sẽ không được tải lên - trình duyệt lưu đường dẫn tới tệp, chứ không phải tệp của chính chúng. –

Trả lời

6

Tôi đã gặp sự cố tương tự, giải pháp của tôi là hủy liên kết sự kiện nhấp chuột của nút và liên kết lại bất cứ khi nào sự kiện thêm được gọi. Thử cái này.

...

add: function (e, data) { 

     $('#upload_button').unbind('click'); 
     data.context = $('#upload_button').bind('click', function() { 
        ... 
        data.submit(); 
     } 
} 
+0

yep, nhưng đó là giống như giải pháp tôi đã đề cập. Lạ tại sao tùy chọn maxNumberOfFiles không hoạt động. Nhưng ok, nó hoạt động và thực sự tôi có thể thực hiện ngữ nghĩa của tùy chọn maxNumberOfFiles: nếu (số lượng các ràng buộc với các tệp được thêm nhiều hơn thì maxNumberOfFiles) hủy liên kết đầu tiên (loại hàng đợi FIFO với các ranh giới). Dù sao tốt, rằng giải pháp là bản năng cho nhiều người :) – static

+0

nếu bạn unbind nó vào plugin, bạn sẽ không thể sử dụng nó nữa? –

+0

Allan, plugin không bị ràng buộc với nút đó, nó được chỉ định tùy ý trong hàm add. – nickbw