2016-03-05 13 views
6

Tôi muốn thực hiện nút tùy chỉnh cho tải lên hình ảnh. Tôi có thể có được kết quả này với bản demo dưới đây:css ẩn nút "Chọn tệp" nhưng hiển thị tệp sau khi chọn

https://jsfiddle.net/algometrix/fgrbyo4z/

Nhưng TÔI CÓ THỂ DISPLAY tên tập tin được lựa chọn sau? Hoặc thậm chí có thể là hình thu nhỏ của hình ảnh nếu có thể? Giống như sau khi tôi chọn một tập tin từ cửa sổ bật mở, tôi muốn nó hiển thị 'tên tập tin' trên trang sau khi tôi chọn nó.

Javascript - jQuery hoàn toàn là một tùy chọn ở đây nếu có ai đó có thể trợ giúp trong khu vực đó.

HTML

<div> 
    <div style="display:block;text-align:center;margin-top:20%;"> 
    <label for="files"> <span class="btn">Select Image</span></label> 
    <input style="visibility: hidden; position: absolute;" id="files" class="form-control" type="file" name="files"> 

    </div> 

</div> 

CSS

.btn { 
    font-family: Arial; 
    color: #ffffff; 
    font-size: 20px; 
    background: #3f88b8; 
    padding: 10px 20px 10px 20px; 
    text-decoration: none; 
} 

.btn:hover { 
    background: #3cb0fd; 
    background-image: -webkit-linear-gradient(top, #3cb0fd, #3498db); 
    background-image: -moz-linear-gradient(top, #3cb0fd, #3498db); 
    background-image: -ms-linear-gradient(top, #3cb0fd, #3498db); 
    background-image: -o-linear-gradient(top, #3cb0fd, #3498db); 
    background-image: linear-gradient(to bottom, #3cb0fd, #3498db); 
    text-decoration: none; 
} 
+0

Javascript. Đó có phải là một lựa chọn không? –

+0

Vâng, rất nhiều! –

+1

Thử các liên kết sau: http://stackoverflow.com/questions/4459379/preview-an-image-before-it-is-uploaded http://stackoverflow.com/questions/12368910/html-display-image-after- select-filename –

Trả lời

6

Với việc bổ sung javascript, chúng tôi chỉ có thể xem cho sự kiện change vào đầu vào, và đặt tên trên trang. Xin lưu ý những thay đổi HTML nhỏ:

<div class="file-upload"> 
    <label for="upload-1" class="btn">Upload</label> 
    <input type="file" id="upload-1"> 
    <p class="file-name">Please select a file.</p> 
</div> 

Với jQuery này:

jQuery(function($) { 
    $('input[type="file"]').change(function() { 
    if ($(this).val()) { 
     var filename = $(this).val(); 
     $(this).closest('.file-upload').find('.file-name').html(filename); 
    } 
    }); 
}); 

Working Fiddle

1

kịch bản này cho thấy hình ảnh càng sớm càng tải lên:

function readURL(input) { 

    if (input.files && input.files[0]) { 
     var reader = new FileReader(); 

     reader.onload = function (e) { 
      $('#img').show().attr('src', e.target.result); 
     } 

     reader.readAsDataURL(input.files[0]); 
    } 
} 

$("#files").change(function(){ 
    readURL(this); 
}); 

Source

Updated Fiddle

+0

Cảm ơn WcPc, tôi có một câu hỏi nhanh. Làm cách nào để gửi hình ảnh này thông qua biểu mẫu tôi đã thiết lập? Giống như tôi có thể có javascript thêm tệp này vào dữ liệu biểu mẫu của tôi và sau đó khi tôi gửi biểu mẫu, tôi có thể gửi hình ảnh này dưới dạng dữ liệu với biểu mẫu hiện tại của tôi không? –

+0

Bạn không cần js cho điều này, chỉ cần thêm các thẻ biểu mẫu xung quanh nó: '

' và sau đó trong PHP của bạn (tôi giả sử bạn sử dụng PHP): 'var your_file = $ _POST ['control_name'] 'ví dụ' var your_file = $ _POST ['files'] 'Mặc dù bạn hiển thị hình ảnh đã được nó vẫn được chọn trong điều khiển tải lên tập tin của bạn ... – WcPc

3

Chỉ cần gõ vào sự kiện thay đổi của các yếu tố file:

var file = document.getElementById("files"); 
file.addEventListener("change", function(){ alert(this.value); }); 

Thể hiện trong fiddle này: https://jsfiddle.net/pbg44bqu/12/

Các vấn đề liên quan