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?
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"); } });
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); } }); } }); }