Ваш <span.file-upload-count>
не добавлен в ваше дерево DOM, потому что вы пытаетесь добавить его в элемент <input>
, что невозможно.Вам необходимо добавить его в элемент, который может иметь дочерние элементы, например <div>
.
. О выбранных именах файлов доступны элементы с элементами this.files
(или $(this)[0].files
, если вы абсолютно).хочу использовать jQuery).
const jUploadLabel = $('div').first(),
uploadInput = document.getElementById('@l_UploadID'),
jUploadCount = $('#file-upload-count');
// Opens the file navigator when the label is clicked.
jUploadLabel.on('click', () => {
$(uploadInput).click();
});
$(uploadInput).on("change", function () {
let files = this.files,
count = files.length,
fileWord = (count > 1) ? 'files' : 'file';
// Removes counter element's content and classes.
jUploadCount.empty().removeClass('sucess failure');
// If at least one file chosen...
if (count > 0) {
jUploadCount.addClass('success');
jUploadCount.append(
`<div>${count} ${fileWord} successfully uploaded.</div>`
);
// For each chosen file, displays its filename.
for (let file of files) {
jUploadCount.append(
`<div>${file.name}</div>`
);
}
}
// ...else if no file...
else {
jUploadCount.addClass('failure');
jUploadCount.append(
'<div>Upload files again.</div>'
);
}
});
.invisible {
display: none;
}
.success {
color: green;
}
.failure {
color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="fa fa-plus">Choose a file</div>
<input class="invisible file-upload" id="@l_UploadID" type="file" multiple>
<div id="file-upload-count"></div>