🔺 input태그 이쁘게 꾸미기
🔺 이미지 업로드 시, fakepath 없애고 이미지 이름만 출력
🔺 이미지 이름 출력되는 input 태그 입력 못하게 하기
이미지 업로드 시, 숨겨져 있던 div영역 출력되면서 미리보기 같이 출력
숨겨져 있던 div 영역에 POST방식으로 submit하는 form태그 만들기
<input type="file">
<div class="container">
<input type="text" class="upload-name"
value="이미지를 업로드 하세요" placeholder="이미지를 업로드 하세요" disabled>
<label for="upload-file">파일선택</label>
<input type="file" id="upload-file">
</div>
1. input(text) 스타일 변경
.upload-name {
display: inline-block;
height: 40px;
padding: 0 10px;
vertical-align: middle;
border: 1px solid #dddddd;
width: 60%;
color: #999999;
border-radius: 5px;
}
2. label 스타일 변경
.container label {
display: inline-block;
padding: 10px 20px;
color: #fff;
vertical-align: middle;
background-color: rgba(0, 53, 109, 0.95);
cursor: pointer;
height: 20px;
margin-left: 10px;
border-radius: 5px;
}
3. input(file) 숨기기
.container input[type="file"] {
position: absolute;
width: 0;
height: 0;
padding: 0;
overflow: hidden;
border: 0;
}
window.addEventListener('load', function() {
const upload_file = document.querySelector("#upload-file");
const upload_name = document.querySelector(".upload-name");
upload_file.addEventListener('input', ()=>{
if(isImage(upload_file.files[0])){
changeVal(upload_name, (upload_file.files[0].name));
}
});
function isImage(file){
return file.type.indexOf('image') >= 0;
}
function changeVal(class_name, change_name){
class_name.value = chnage_name;
}
});
숨겨진 input(file), 즉 label을 클릭하여 사진을 업로드하면
isImage()함수를 통해 업로드된 file이 image인지 구분한다.
변수 file의 type이 image(png,jpg ...)인지 구분한다.
input(text)의 value 속성 값 변경
따라서 업로드된 file에 image가 들어가면 0,1,2.. 를 반환하고 없으면 -1을 반환한다.
image일 경우에만 changeVal()함수를 통해 input(text)의 값을 변경한다.
file upload 할 때는 차이가 없지만 나중에 헷갈릴 수 있으니!
1. 📣input
Interface : Event
change보다 호환이 더 잘됨
요소 변경(value 값 변경)이 될 때마다 발생한다.
2. 📣change
Interface : InputEvent
요소 변경(value 값 변경)이 끝나면 발생한다.
다음 글에서는 업로드된 이미지 미리보기 출력과 form태그를 이용하여 POST 값 넘기기