cbw1030
기록하는 공간
cbw1030
전체 방문자
오늘
어제
  • 전체보기 (101)
    • Programming (99)
      • Java (19)
      • Servlet (10)
      • Spring Framework (13)
      • Javascript (22)
      • AWS (2)
      • 네트워크 (8)
      • 데이터베이스 (13)
      • 리눅스 (3)
      • 블록체인 (7)
      • 용어 정리 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 삼성SDS
  • 인공지능
  • Brightics AI
  • beautifulsoup
  • 머신러닝
  • 브라이틱스 튜토리얼
  • 브라이틱스 스튜디오 사용법
  • 크롤링
  • Brightics Studio
  • 삼성SDS 브라이틱스
  • 브라이틱스
  • 생활코딩
  • 데이터 사이언스
  • javascript
  • web
  • 브라이틱스 스튜디오
  • Brightics
  • 차원축소
  • 데이터분석
  • react

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
cbw1030

기록하는 공간

[Javascript] 이벤트 트리거를 사용하여 input 속성을 커스터마이징 해보자!
Programming/Javascript

[Javascript] 이벤트 트리거를 사용하여 input 속성을 커스터마이징 해보자!

2020. 12. 30. 18:40
반응형

이번 포스팅은 이벤트 트리거를 사용하여 input 속성을 커스터마이징 해보겠습니다.

 

html에서 input 속성을 그대로 사용하면 아래와 같습니다.

 

css로 꾸미려고 하면 다음과 같이 됩니다.

 

파일 선택만 남기고 깔끔하게 디자인을 할 수 있는 방법이 없을까요?

 

자바스크립트에서 제공하는 이벤트 트리거라는 기능을 사용하면 깔끔하게 디자인이 가능합니다.

 

 

이벤트 트리거

트리거는 '방아쇠'를 의미합니다.

방아쇠를 당기면 총알이 나가는 것처럼 어떠한 행위(클릭 등)를 했을 때 파일을 선택할 수 있도록 할 수 있습니다.

 

span 태그를 하나 생성해서 span 태그를 눌렀을 때 위의 input을 실행시켜보겠습니다.

 

우선 하나의 div태그에 input, span을 같이 넣어두겠습니다.

 

<div>
    <input type="file">
    <span class="file-button">파일선택</span>
</div>

 

이 상태라면 파일 선택이 두개이니 input 속성을 display: none을 통해 숨겨보겠습니다.

지금은 파일 선택에 아무런 이벤트가 걸려있지 않기 때문에 아무리 클릭을 해도 아무런 반응이 없는 상태입니다.

 

input 속성과 span 태그를 객체로 받아오는 작업을 먼저 하겠습니다.그리고 span 태그를 클릭했을 때 이벤트가 실행되어야 하니 다음과 같이 코드를 작성합니다.

var fileButton = section.querySelector(".file-button");
var file = section.querySelector("input[type=file]");

fileButton.onclick = function(e) {
    
}

 

이후 이벤트 트리거를 하기 위해 MouseEvent 객체를 생성해야 하는데 view, bubbles, cancelable을 다음과 같이 설정해야 합니다.

그리고 dispatchEvent 메서드를 통해 MouseEvent 객체를 넘겨주면 됩니다.

var fileButton = section.querySelector(".file-button");
var file = section.querySelector("input[type=file]");

fileButton.onclick = function(e) {
    var event = new MouseEvent("click", {
        'view': window,
        'bubbles': true,
        'cancelable': true
    });

    file.dispatchEvent(event);
}

그럼 span 태그를 클릭해도 input의 file 속성이 동작하여 파일을 선택할 수 있습니다.

 

뿐만 아니라 span 태그에 css효과를 주어 다음과 같이 디자인을 할 수도 있습니다.

 

 

인터넷 익스플로러의 과거 버전에서는 MouseEvent를 객체를 생성하기 위해서는 다음과 같습니다.

var event = document.createEvent("MouseEvent");
event.initEvent("click", true, true); // event type, bubbles, cancelable

 

createEvent, initEvent 메서드를 외우는 것보다는 이런게 있구나 하면서 넘어가는 것이 좋을 것 같습니다.

반응형
저작자표시 (새창열림)

'Programming > Javascript' 카테고리의 다른 글

[Javascript] ES6 Promise를 통해 콜백지옥 문제를 해결해보자  (0) 2021.01.06
[Javascript] ES6 Destructuring 문법에 대해 알아보자  (0) 2020.12.30
[JavaScript] 이벤트 버블링과 이벤트 캡쳐링을 알아보자  (0) 2020.12.28
[Javascript] AJAX를 통해 새로고침 없이 데이터를 불러오기  (1) 2020.12.26
[Javascript] onclick vs addEventListener의 차이점을 알아보자  (0) 2020.12.19
    'Programming/Javascript' 카테고리의 다른 글
    • [Javascript] ES6 Promise를 통해 콜백지옥 문제를 해결해보자
    • [Javascript] ES6 Destructuring 문법에 대해 알아보자
    • [JavaScript] 이벤트 버블링과 이벤트 캡쳐링을 알아보자
    • [Javascript] AJAX를 통해 새로고침 없이 데이터를 불러오기
    cbw1030
    cbw1030

    티스토리툴바