Saya telah menyesuaikan tombol unggah formulir saya dan menyembunyikan bidang input melalui css display:none tetapi ketika saya memilih gambar, input tidak menampilkan teks pratinjau!

Saya ingin menampilkan teks pratinjau gambar yang dipilih sehingga pengguna tahu bahwa dia telah memilih gambar!

HTML:

<div class="form-group">
    <label for="before_image" class="custom-file-upload"><i class="fa fa-cloud-upload"></i> Before Image*</label>
    <input type="file" id="before_image" name="before_image" class="form-group" placeholder="Before Image" data-bind="value: before_image">                        
    <span>No file chosen</span>
</div>

CSS:

.custom-file-upload {
    border: 1px solid #ccc;
    display: inline-block;
    padding: 6px 12px;
    cursor: pointer;
}
input[type=file] {
    display: none;
}
 input[type=file]{
    display:none;
}
 .custom-file-upload {
    border: 1px solid #ccc;
    display: inline-block;
    padding: 6px 12px;
    cursor: pointer;
}
<div class="form-group">
	<label for="before_image" class="custom-file-upload"><i class="fa fa-cloud-upload"></i> Before Image*</label>
	<input type="file" id="before_image" name="before_image" class="form-group" placeholder="Before Image" data-bind="value: before_image">                        <span>No file chosen</span>
</div>

PERBARUI: Saya mencoba semua solusi ini (Bagaimana cara menampilkan nama file untuk file input gaya khusus menggunakan jquery?) tetapi tidak ada yang berhasil untuk saya. Dalam skenario saya, saya memiliki dua tombol unggah satu adalah before image upload dan yang kedua adalah after image upload seperti yang ditunjukkan dalam video.

Tetap saja saya tidak dapat menampilkan teks pratinjau di depan tombol unggah.

1
Iftikhar uddin 30 Mei 2019, 13:25

2 jawaban

Jawaban Terbaik

Cukup tambahkan fungsi baru di file tipe input pada acara onchange. Silakan temukan kode terlampir.

 input[type=file]{
    display:none;
}
 .custom-file-upload {
    border: 1px solid #ccc;
    display: inline-block;
    padding: 6px 12px;
    cursor: pointer;
}
<div class="form-group">
	<label for="before_image" class="custom-file-upload"><i class="fa fa-cloud-upload"></i> Before Image*</label>
	 <input type="file" id="before_image" name="before_image" class="form-group" placeholder="Before Image" data-bind="value: before_image" onChange="((e)=>{
file = e.target.files.item(0);
var fr = new FileReader;
fr.onloadend =(imgsrc)=>{
 	imgsrc = imgsrc.target.result; // file reader
var img = document.createElement('img');
   	img.src =imgsrc;
this.nextSibling.nextSibling.innerHTML='';
this.nextSibling.nextSibling.appendChild(img);
};
fr.readAsDataURL(file);
})(event)">
<span>No file chosen</span>
</div>
1
localhost 30 Mei 2019, 11:37

Ini tidak berfungsi karena <span>No file chosen</span> Anda statis.

Mencoba:

<div class="form-group">
    <label for="before_image" class="custom-file-upload"><i class="fa fa-cloud-upload"></i> Before Image*</label>
    <input type="file" id="before_image" name="before_image" class="form-group" placeholder="Before Image" data-bind="value: before_image">                        
    <span id="images"></span>
</div>

<script type="text/javascript">
var field = document.getElementById('before_image');
var span = document.getElementById('images');

field.addEventListener('change', function() {
    var img = document.createElement('img');
    img.src = field.files[0].getAsDataURL();
    span.appendChild(img);
});
</script>
1
tgdn 30 Mei 2019, 10:54