Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Safari
- next-i18n
- audio 객체
- javascript #encodeuri #encodeuricomponent
- 다국어
- TEXTBOX
- 해시
- 스택
- 회고
- CBR
- JS
- matchmedia
- react-i18n
- 프로그래머스
- 개발자회고
- VBR
- 변수명
- fabricJS
- safari 버그
- fontfamily
- currenttime
- 알고리즘
- ime
- ffmpeg
- 크로스브라우징
- 코드리뷰
- railway #mysql #db배포
- 폰트
- 부동소수점
Archives
- Today
- Total
Leo의 기술 블로그
Enter 키 입력 시 한글이 두 번 제출되는 문제 해결하기 본문
문제 상황
textarea 요소에 입력을 하고 enter 키를 누를때 한 번만 제출 될꺼라는 생각과 달리 중복돼서 제출이 되는 이슈가 있었다.
이 현상이 발생하는 방법은 오로지 한글을 입력하고 enter 키를 누를때만 발생하는 이슈였다.
<textarea
data-component="comment-right-panel"
type="text"
placeholder="답글을 입력해 주세요."
[value]="_inputValue"
(input)="onInput($event)"
(keydown)="onKeyDown($event, 'reply-change')"
(focus)="onTextareaFocus($event)"
(blur)="onTextareaBlur($event)"
[style.text-indent]="getNicknameIndent()"
></textarea>
onKeyDown(event: KeyboardEvent, formType: string): void {
event.stopPropagation();
// 엔터키 누를 때 기본 동작(줄바꿈) 방지
if (event.key === 'Enter' && !CrossBrowsing.touchDevice) {
event.preventDefault();
if (!this._inputValue.trim()) {
return; // 빈 내용이면 실행하지 않음
}
즉 한글을 입력후 Enter 키를 누르면 onKeyDown에 event.key가 Enter인경우가 두 번 호출된다.
문제 원인
IME 프로그램의 작동 방식때문에 발생했다고 볼 수 있다.
자음과 모음의 조합으로 사용자가 작성후 Enter 키를 입력하면 첫 번째 이벤트는 IME가 이를 가로채서 조합이 최종적으로 완료됐다는 확정을 하기 위해서 사용한다고 보면 된다.
두 번째 Enter 이벤트는 말그대로 제출을 위해서 사용된 이벤트로 처리가 된다.
다른 문자들의 경우 한글처럼 조합을 하지 않기 때문에 IME가 동작하지 않아 제출을 위한 Enter 이벤트만 동작을 한다.
해결 방법
해결 방법은 한글 입력후 두 번의 event 인자의 값을 찍어보면 처음 발생한 이벤트에는 isComposing이 true로 되어있고 두 번째 발생한 이벤트에는 isComposing이 false로 되어있는걸 확인해볼 수 있다.
처음 발생한 이벤트의 경우 조합중이기 때문에 true로 오기 때문에 true일때만 제출 로직이 동작하지 않도록 분기처리 해주면 된다.
'Frontend(Web, App) > JavaScript' 카테고리의 다른 글
matchMedia 메서드 (1) | 2025.07.21 |
---|---|
부동 소수점 처리 (3) | 2025.07.12 |
encodeURIComponent, encodeURI 사용 이유 (0) | 2025.04.12 |