Pourquoi les événements de processus du plug-in jQuery File Upload ne se déclenchent-ils pas?

J’ai un problème étrange avec le plugin jQuery File Upload. Si j’utilise ce sitax:

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

L’événement ne se produit toujours pas, mais j’ai la bonne variable data.context (c’est-à-dire le div avec la barre de progression du fichier ajouté).

Quand j’utilise ce sintax

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

événement processalways se produit correctement, mais je me suis trompé data.context (je pense que dans ce cas, data.context fera toujours référence à l’élément $ (‘fileupload’) .

J’ai besoin à la fois d’événement de processus et de variable data.context . Comment puis-je faire?

Première syntaxe

Si vous voulez démarrer le processus, vous devez appeler data.submit(); dans la fonction d’ajout.

Ensuite, vous ne pouvez pas appeler un rappel processalways , selon la documentation, il faut toujours utiliser:

 $('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"); } }); 

Deuxième syntaxe

Je ne l’ai jamais utilisé, mais si cela fonctionne, c’est que fileuploadd n’existe pas. Et c’est donc le fileuploadadd par défaut fileuploadadd qui est utilisé, et il peut appeler data.submit() .

J’avais lu un peu de code dans jquery.fileupload-ui.js

Peut-être que c’est ce que tu veux?

 // 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._sortinggger('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); } }); } }); }