🔖 Snippets/Javascript

[javaScript] keydown 이벤트 추가 & 중복 이벤트 발생 방지

2021. 5. 13. 18:58
반응형

안녕하세요, 이번에는 javaScript에서 input 태그에 enter 키가 눌렸을 때 처리할 keydown 이벤트를 추가하는 방법과,  중복 이벤트 발생을 방지하는 방법에 대해서 알아보겠습니다.

 

html 코드 :

<input type="text" id="todo_input" placeholder="insert title..">

 

js 코드 :

$(function() {
		
	// 	.... 생략
    
    var keydown = false;    // 중복 발생 방지하기 위한 변수
    const $input = document.getElementById('input-title');	// id값으로 htmlElement 찾기
    
    // 해당 element에 addEventListener 추가
    $input.addEventListener('keydown', function (e) {
        if (keydown) return;	// keydown을 했다면 종료.
        else {
            // key가 Enter이고, 빈칸 입력이 아닐 때 실행!
            if (e.key == 'Enter') {
                keydown = true;     // 엔터키가 눌렸고, 빈칸 체크도 완료했을 때, true로 값을 줘서 중복 실행 방지!
                $.ajax({
                    url: 'http://localhost:8080/title',
                    type: 'POST',
                    dataType: 'json',
                    contentType: 'application/json',
                    data: JSON.stringify({
                        title: $('#' + $input.id).val()
                    }),

                    success: function (result) {
                        console.log(result);
                        addTodo(result);
                        $('#input-title').val(''); // input 공백으로 초기
                        keydown = false;	// 다시 keydown 변수 초기화
                    }
                });
            }
        }
    });
    
    //...
});

boolean 타입 keydown 변수를 사용하는게 핵심입니다.  keydown 변수를 설정해주지 않으면 중복 이벤트가 발생하게 됩니다!

먼저 keydown 변수를 false로 설정해준 다음, enter키를 눌렀다면 그때! keydown 변수를 true값으로 설정해줘서 추가로 엔터키 이벤트가 발생하지 않도록 해줍니다. 그리고 요청을 처리 완료했다면, 다시 keydown 변수를 false로 초기화 해주셔야 합니다!! 

그럼 끝!

반응형
저작자표시 (새창열림)
'🔖 Snippets/Javascript' 카테고리의 다른 글
  • JS에서 객체에 function을 선언해야 하는 이유(feat. 전역 변수 충돌)
  • [javaScript] Drag & Drop
iseunghan
iseunghan
꾸준하게 열심히..
iseunghan
iseunghan

공지사항

  • 어제보다 나은 오늘이 되기 위해 🔥
  • 분류 전체보기 (262)
    • 💐 Spring (14)
      • 개념 및 이해 (2)
      • Spring 핵심 기술 (24)
      • Spring REST API (8)
      • Spring MVC, DB 접근 기술 (7)
      • Spring Security (23)
      • Spring in Action (1)
    • 🌻 JAVA (84)
      • 자바 ORM 표준 JPA 프로그래밍 (20)
      • 알고리즘, 자료구조 (13)
      • 디자인 패턴 (7)
      • 정리정리정리 (43)
      • JUnit (1)
    • 🔖 Snippets (3)
      • Javascript (3)
    • ⚙️ Devops (22)
      • ⛏ Git (11)
      • 🐳 Docker (6)
      • 🐧 Linux (3)
      • 🌈 Jenkins (1)
      • 📬 Kafka (1)
    • 💬 ETC.. (4)
      • 💻 macOS (2)
    • 🌧️ ORM (2)
      • JPA (2)
    • 🐍 Python (3)
    • 📚 Databases (15)
      • 오라클로 배우는 데이터베이스 개론과 실습(2판) (3)
      • RealMySQL 8.0 (8)
    • 🔥 Computer Science (5)
      • 📡 네트워크 (5)
    • 🏷️ 협업 (1)
    • 📜 코딩테스트 (38)
      • BAEKJOON\수학 1, 수학 2 (8)
      • BAEKJOON\재귀 (5)
      • BAEKJOON\브루트 포스 (3)
      • BAEKJOON\정렬 (1)
      • BAEKJOON\백트래킹 (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\이분탐색 (1)
      • BAEKJOON\다이나믹 프로그래밍 (9)
      • BAEKJOON\그리디 알고리즘 (0)
    • ✨ ISEUNGHAN (1)

인기 글

전체
오늘
어제
반응형
hELLO · Designed By 정상우.
iseunghan
[javaScript] keydown 이벤트 추가 & 중복 이벤트 발생 방지
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.