Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I hide the upload button once the file is uploaded?

I'm using blueimp and jquery UI for file uploads.

I'd like to hide this button once a file is uploaded and display it once again if the photo is removed. How can I go about doing this?

enter image description here

Here is my 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">&nbsp;</div>
        </div>
    </div>
    <table role="presentation" class="table table-striped">
        <tbody class="files"></tbody>
    </table>
</form>

The 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>

The closest post I've found on SO was not exactly relevant.

Update:

Tried the callback solution as answered by @ZakariaAcharki:

console.log('start')
$('input[name="image"]')
    .bind('fileuploadcompleted', function (e, data) {
        console.log('hiding')
        $('.fileinput-button').hide();
    })
    .bind('fileuploaddestroyed', function (e, data) {
        console.log('showing')
        $('.fileinput-button').show();
    });
console.log('ended')

Output reads: 'start' and 'ended'. Not sure why it's not getting fired.

Update 2: Hiding seems to work with this, but it doesn't show.

$('.fileupload')
    .bind('fileuploaddone', function (e, data) {
        console.log('hide');
        $('.fileinput-button').hide();
    })
    .bind('fileuploaddestroy', function (e, data) { //tried fileuploaddestroyed too
        console.log('show');
        $('.fileinput-button').show();
    });

The Javascript (aside from the unchanged tmpl.min.js and jquery file upload/UI files):

/*
 * 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'
        )
    );
});
like image 985
vphilipnyc Avatar asked Sep 28 '17 17:09

vphilipnyc


People also ask

How do I hide the upload button in HTML?

Hiding the button In some instances, you may want to hide a file upload button. The way to do this typically relies on CSS. opacity: 0 — makes the input transparent. z-index: -1 — makes sure the element stays underneath anything else on the page.

What is the upload button?

Uploading Files File upload buttons are used often within apps and custom page layouts. For example, a file upload button can be used in order to upload a catalog for a store that will appear at a specific spot in a page layout. To upload a file through an upload button, click Choose a file.

How does upload file work?

Uploading is the transmission of a file from one computer system to another, usually larger computer system. From a network user's point-of-view, to upload a file is to send it to another computer that is set up to receive it.


1 Answers

Have you tried the callbacks fileuploadcompleted and fileuploaddestroyed :

$('input[name="image"]')
    .bind('fileuploadcompleted', function (e, data) {
         $('.fileinput-button').hide();
    })
    .bind('fileuploaddestroyed', function (e, data) {
         $('.fileinput-button').show();
   });

Hope this helps.

like image 179
Zakaria Acharki Avatar answered Sep 22 '22 10:09

Zakaria Acharki