Reject files that exceed a maximum file size.
import { isFile } from '@andresclua/validate'
const config = {
required: true,
maxSize: 1 * 1024 * 1024,
customMessage: {
size: 'File must be smaller than 1MB'
}
}
// On Change
fileInput.addEventListener('change', () => {
const result = isFile({ element: fileInput.files[0], config })
if (result.isValid) {
fileInput.classList.remove('c--form-file-a--error')
fileInput.classList.add('c--form-file-a--valid')
errorEl.textContent = ''
} else {
fileInput.classList.add('c--form-file-a--error')
fileInput.classList.remove('c--form-file-a--valid')
errorEl.textContent = result.errorMessage
}
})
// On Submit
validateBtn.addEventListener('click', () => {
const result = isFile({ element: fileInput.files[0], config })
if (result.isValid) {
fileInput.classList.remove('c--form-file-a--error')
fileInput.classList.add('c--form-file-a--valid')
errorEl.textContent = ''
} else {
fileInput.classList.add('c--form-file-a--error')
fileInput.classList.remove('c--form-file-a--valid')
errorEl.textContent = result.errorMessage
}
})
<div class="c--form-group-a"> <label class="c--label-a" for="file">Select a file (max 1MB)</label> <input type="file" id="file" class="c--form-file-a"> <span class="c--form-error-a"></span> </div>
/* Orientative — feel free to adapt to your own conventions */
.c--form-group-a {
margin-bottom: 1.5em;
}
.c--label-a {
display: block;
font-size: 1em;
margin-bottom: 0.5em;
}
.c--form-file-a {
display: block;
width: 100%;
font-size: 1em;
cursor: pointer;
}
.c--form-file-a--error { outline: 2px solid red; border-radius: 4px; }
.c--form-file-a--valid { outline: 2px solid green; border-radius: 4px; }
.c--form-error-a {
color: red;
font-size: 0.875em;
display: none;
}
.c--form-error-a:not(:empty) { display: block; }
maxSize number Maximum file size in bytes (e.g. 1 * 1024 * 1024 for 1MB) customMessage.size string Error message for oversized files
On Change
On Submit