我正在使用blueimp和
jquery UI进行文件上传.
我想在上传文件后隐藏此按钮,如果删除照片则再次显示该按钮.我该怎么做呢?
这是我的HTML:
<form class="fileupload" action="${pageContext.request.contextPath}/someUrl" method="POST" enctype="multipart/form-data"> <noscript><input type="hidden" name="redirect" value="https://www.somedomain.com"/></noscript> <input type="hidden" name="type" value="image1"> <div class="row fileupload-buttonbar"> <div class="col-lg-7"> <span class="btn btn-info fileinput-button"><i class="fa fa-plus"></i> Add one photo... <input type="file" name="image" accept="image/png,image/jpeg"> </span> <span class="fileupload-process"></span> </div> <div class="col-lg-5 fileupload-progress fade"> <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100"> <div class="progress-bar progress-bar-success" style="width:0;"></div> </div> <div class="progress-extended"> </div> </div> </div> <table role="presentation" class="table table-striped"> <tbody class="files"></tbody> </table> </form>
X-TMPL:
<!-- The template to display files available for upload --> <script id="template-upload" type="text/x-tmpl"> {% for (var i=0,file; file=o.files[i]; i++) { %} <tr class="template-upload fade"> <td> <span class="preview"></span> </td> <td> <p class="name">{%=file.name%}</p> <strong class="error text-danger"></strong> </td> <td> <p class="size">Processing...</p> <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="progress-bar progress-bar-success" style="width:0%;"></div></div> </td> <td> {% if (!i && !o.options.autoUpload) { %} <button class="btn btn-info start" disabled> <span>Start</span> <i class="fa fa-caret-right"></i> </button> {% } %} {% if (!i) { %} <button class="btn btn-warning cancel"> <i class="fa fa-trash-o"></i> <span>Remove Photo</span> </button> {% } %} </td> </tr> {% } %} </script> <!-- The template to display files available for download --> <script id="template-download" type="text/x-tmpl"> {% for (var i=0,file; file=o.files[i]; i++) { %} <tr class="template-download fade"> <td> <span class="preview"> {% if (file.thumbnailUrl) { %} <a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" data-gallery><img src="{%=file.thumbnailUrl%}"></a> {% } else { %} <img src="{%=file.thumbnail_url%}"> {% } %} </span> </td> <td> <p class="name"> {% if (file.url) { %} <a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" {%=file.thumbnailUrl?'data-gallery':''%}>{%=file.name%}</a> {% } else { %} <span>{%=file.name%}</span> {% } %} </p> {% if (file.error) { %} <div><span class="text-danger"><i class="fa fa-exclamation-circle"></i> Error</span> {%=file.error%}</div> {% } %} </td> <td> <span class="size">{%=o.formatFileSize(file.size)%}</span> </td> <td> {% if (file.deleteUrl) { %} <button class="btn btn-danger delete" data-type="{%=file.deleteType%}" data-url="{%=file.deleteUrl%}"{% if (file.deleteWithCredentials) { %} data-xhr-fields='{"withCredentials":true}'{% } %}> <i class="fa fa-trash-o"></i> <span>Remove Photo</span> </button> <input type="checkBox" name="delete" value="1" class="toggle"> {% } else { %} <button class="btn btn-warning cancel"> <i class="fa fa-trash-o"></i> <span>Remove Photo</span> </button> {% } %} </td> </tr> {% } %} </script>
我在SO上最近的帖子found并不完全相关.
更新:
尝试了@ZakariaAcharki回答的回调解决方案:
console.log('start') $('input[name="image"]') .bind('fileuploadcompleted',function (e,data) { console.log('hiding') $('.fileinput-button').hide(); }) .bind('fileuploaddestroyed',data) { console.log('showing') $('.fileinput-button').show(); }); console.log('ended')
输出读数:’开始’和’结束’.不知道为什么它是not getting fired.
更新2:
隐藏似乎与此有关,但它没有显示.
$('.fileupload') .bind('fileuploaddone',data) { console.log('hide'); $('.fileinput-button').hide(); }) .bind('fileuploaddestroy',data) { //tried fileuploaddestroyed too console.log('show'); $('.fileinput-button').show(); });
Javascript(除了未更改的tmpl.min.js和jquery文件上传/ UI文件):
/* * jQuery File Upload Plugin JS Example 8.9.1 * https://github.com/blueimp/jQuery-File-Upload * * Copyright 2010,Sebastian Tschan * https://blueimp.net * * Licensed under the MIT license: * http://www.opensource.org/licenses/MIT */ /* global $,window */ $(function () { 'use strict'; var uploadPaths = ["fileA","fileB","fileC","fileCA","fileCB","fileCC"]; // Initialize the jQuery File Upload widget: $('.fileupload').each(function (index) { $(this).fileupload({ dropZone: $(this),acceptFileTypes: /(\.|\/)(gif|jpe?g|png|doc|docx|pdf|ppt|pptx)$/i,maxFileSize: 10000000,// 10 MB // Error and info messages: messages: { acceptFileTypes: 'Sorry,this file type not allowed. Please make sure the extension of the file is either .gif,.jpg,.jpeg,.png,.doc,.docx,.pdf,.ppt,or .pptx.',maxFileSize: 'Please make sure your file is under 10 MB in size.' } }); // Load existing files: $(this).addClass('fileupload-processing'); $.ajax({ // Uncomment the following to send cross-domain cookies: //xhrFields: {withCredentials: true},url: '/' + uploadPaths[index],context: $(this) }).done(function (data) { $(this).fileupload('option','done').call(this,$.Event('done'),{result: {files: data.files}}); $(this).removeClass('fileupload-processing'); }); }); // Enable iframe cross-domain access via redirect option: $('#fileupload').fileupload( 'option','redirect',window.location.href.replace( /\/[^\/]*$/,'/cors/result.html?%s' ) ); });
解决方法
你有没有尝试过callbacks fileuploadcompleted和fileuploaddestroyed:
$('input[name="image"]') .bind('fileuploadcompleted',data) { $('.fileinput-button').hide(); }) .bind('fileuploaddestroyed',data) { $('.fileinput-button').show(); });
希望这可以帮助.