2013-12-09 4 views
3

У меня есть странная проблема с плагином загрузки файлов jQuery. Если я использую этот sitax:Почему процесс jQuery загрузки файлов не запускается?

$('fileupload').fileupload({ 
    url: myurl, 
    add: function(e, data){ 
    console.log("add event"); 
    }, 
    processalways: function(e, data){ 
    console.log("processalways event"); 
    } 
}); 

processalways событие не происходит, но я получил правильный data.context переменной (то есть DIV с индикатором хода добавленного файла).

Хотя, когда я использую этот синтаксис

$('fileupload').fileupload({ 
    url: myurl 
}).on('fileuploadadd',function(e, data){ 
    console.log("add event"); 
}).on('fileuploadprocessalways', function(e, data){ 
    console.log("processalways event"); 
}); 

processalways событие правильно происходит, но я ошибалась data.context (я думаю, что в этом случае data.context всегда будет ссылаться на $ («FileUpload») элемент.

мне нужно как событие процесса и data.context переменных. Как я могу сделать?

+0

Привет Thiezar! У меня такая же ситуация и из того, что я понимаю, если вы повторно реализуете обратный вызов add, вам нужно каким-то образом запустить процесс, как в примере с документами (https://github.com/blueimp/jQuery-File-Upload/wiki/Options# Добавить). Однако, когда я делаю это, как в примере, события processalways все равно не срабатывают. Если я придерживаюсь реализации добавления по умолчанию, он запускается. Хотите узнать, вы видите это? – Joni

+0

О, я по крайней мере понял это для своего случая: если вы повторно реализуете обратный вызов add, вы должны сделать это как привязку, а не как вариант (как рекомендует автор), поэтому он не будет переопределять параметры дополнительных ресурсов. Так что используйте что-то вроде: $ ('# fileupload'). Bind ('fileuploadadd', function (e, data) {/ * ... * /}) – Joni

+0

Я попытался реализовать его как связывание, но по некоторым другим причинам что-то пошло не так. Поэтому я решил проблему, отказавшись от модуля загрузки файлов jQuery и используя плагин Plupload. С помощью Plupload я смог сделать все, как захотел, в кратчайшие сроки. – Thiezar

ответ

3

Первого SY ntax

Если вы хотите начать процесс, вы должны позвонить data.submit(); в добавочный элемент.

Тогда вы не можете вызвать processalways обратного вызова, according to the documentation это always, которые должны быть использованы:

$('input').fileupload({ 
    url: "/echo/json", 
    add: function (e, data) { 
     console.log("Add callback"); 
     $('#start_upload').click(function(){ 
      data.submit(); 
     }); 
    }, 
    always: function (e, data) { 
     console.log("Always callback"); 
    } 
}); 

Второй синтаксис

Я никогда не использовать его, но если он работает это потому, что fileuploadd Безразлично не существует. И поэтому используется по умолчанию fileuploadadd, и он может звонить data.submit().

+0

Извините, что написал неправильное имя для * fileuploadadd *. я использую * данные.submit() * в добавить событие. Я не писал в примере просто для простоты. В соответствии с документацией есть событие * always * event и * processalways *. Но все события процесса (то есть * процесс *, * processstart *, * processalways * и т. Д.) Не срабатывают. – Thiezar

+0

Я отредактировал сообщение для вашей кнопки «Обновление» – Fractaliste

+0

Я отредактировал свой ответ «couse» Я понял, что на самом деле я использую * data.submit() * в своем обратном вызове XD – Thiezar

0

Я прочитал немного кода в jquery.fileupload-ui.js

Может быть, это то, что вы хотите?

// The add callback is invoked as soon as files are added to the fileupload 
 
// widget (via file input selection, drag & drop or add API call). 
 
// See the basic file upload widget for more information: 
 
add: function (e, data) { 
 
    if (e.isDefaultPrevented()) { 
 
     return false; 
 
    } 
 
    var $this = $(this), 
 
     that = $this.data('blueimp-fileupload') || 
 
      $this.data('fileupload'), 
 
     options = that.options; 
 
    data.context = that._renderUpload(data.files) 
 
     .data('data', data) 
 
     .addClass('processing'); 
 
    options.filesContainer[ 
 
     options.prependFiles ? 'prepend' : 'append' 
 
     ](data.context); 
 
    that._forceReflow(data.context); 
 
    that._transition(data.context); 
 
    data.process(function() { 
 
     return $this.fileupload('process', data); 
 
    }).always(function() { 
 
     data.context.each(function (index) { 
 
      $(this).find('.size').text(
 
       that._formatFileSize(data.files[index].size) 
 
      ); 
 
     }).removeClass('processing'); 
 
     that._renderPreviews(data); 
 
    }).done(function() { 
 
     data.context.find('.start').prop('disabled', false); 
 
     if ((that._trigger('added', e, data) !== false) && 
 
      (options.autoUpload || data.autoUpload) && 
 
      data.autoUpload !== false) { 
 
      data.submit(); 
 
     } 
 
    }).fail(function() { 
 
     if (data.files.error) { 
 
      data.context.each(function (index) { 
 
       var error = data.files[index].error; 
 
       if (error) { 
 
        $(this).find('.error').text(error); 
 
       } 
 
      }); 
 
     } 
 
    }); 
 
}

Смежные вопросы