TIL(Today I Learned)
6월 16일 TIL - 인풋 필수입력, 이미지 미리보기
Hyerin P.
2023. 6. 18. 22:08
▷ 오늘의 시도
! 폼 데이터를 제출할 때 인풋 태그에 reqired를 주어서 필수 입력값이 되게 하기 !
이렇게 하려고 하면 버튼 타입이 submit이어야하는데 현재 글 작성 버튼은 버튼타입으로 설정되어 있었다. 그래서 버튼을 눌러서 발생하는 이벤트가 살짝 변형되어져야 했다. submit을 했을 때 새로고침되는 이벤트를 없애주고 백으로 포스트형식으로 요청을 보내도록 고쳐중었다.
! 이미지 제출시 미리보기!
js에서 인풋태그를 가져와서 .addEventListener를 추가해준다. 발생되는 이벤트는 이미지파일을 읽고 그 파일을 html에 띄어주는 함수이다.
function getImageFiles(e) {
const uploadFiles = [];
const files = e.currentTarget.files;
const imagePreview = document.querySelector('#image-preview');
const docFrag = new DocumentFragment();
if ([...files].length >= 10) {
alert('이미지는 최대 9개 까지 업로드가 가능합니다.');
return;
}
// 파일 타입 검사
[...files].forEach(file => {
if (!file.type.match("image/.*")) {
alert('이미지 파일만 업로드가 가능합니다.');
return
}
// 파일 갯수 검사
if ([...files].length < 10) {
uploadFiles.push(file);
const reader = new FileReader();
imagePreview.innerHTML = ''
reader.onload = (e) => {
const preview = createElement(e, file);
imagePreview.appendChild(preview);
};
reader.readAsDataURL(file);
}
});
}
function createElement(e, file) {
const div = document.createElement('div');
div.setAttribute('class', 'col')
const div2 = document.createElement('div');
div2.setAttribute('style', 'height:150px; width:150px;')
div.appendChild(div2)
const img = document.createElement('img');
img.setAttribute('src', e.target.result);
img.setAttribute('class', 'cardimg img-thumbnail');
img.setAttribute('data-file', file.name);
div2.appendChild(img);
return div;
}
const imageUpload = document.getElementById("images");
imageUpload.addEventListener('change', getImageFiles);