목록 보기
setSelectionRange로 검색창 커서 옮기기
프론트엔드

setSelectionRange로 검색창 커서 옮기기

카카오엔터테인먼트FE
카카오엔터테인먼트FE
2021년 11월 11일

두줄요약

검색창 재포커스 시 커서를 텍스트 끝으로 옮기는 구현 문제를 다뤘습니다. `setSelectionRange`와 `setTimeout(0)`으로 브라우저 기본 동작 이후 처리했습니다.

문제 상황

  • 긴 검색어 입력 후 검색창 재포커스 시 커서와 화면 위치를 텍스트 끝으로 이동해야 하는 요구사항
  • scrollLeft만으로 화면은 이동하지만 실제 커서는 클릭 위치에 남는 불일치

원인 분석

  • focus 이벤트 콜백 이후 브라우저 기본 클릭 동작으로 커서 위치가 다시 클릭 지점으로 변경되는 타이밍 이슈
  • mouseup 기반 처리의 키보드·스크린 리더 포커스 미지원 및 임의 위치 커서 지정 불가 문제

해결 방법

  • focus 이벤트에서 setTimeout(..., 0)으로 기본 클릭 동작 이후 커서 이동 예약
  • setSelectionRange(maxLength, maxLength)로 선택 없이 입력값 끝 위치에 커서 배치
  • scrollLeft를 함께 조정해 긴 텍스트의 끝부분 노출

주의할 점

  • setSelectionRange 지원 대상은 text, search, url, tel, password 타입의 input과 textarea
  • 지연값 0도 즉시 실행이 아닌 후속 작업 큐 실행과 최소 지연 발생

카카오 계열사 채용29건

채용 사이트에서 전체 보기

다음 읽기

#JavaScript 주제를 이어서 읽기

setSelectionRange로 검색창 커서 옮기기

검색창 포커스 시 커서를 끝으로 옮기는 과정에서 발생한 이벤트 순서 문제를 분석했습니다. `setSelectionRange`와 0ms `setTimeout`으로 커서·스크롤 위치를 함께 제어했습니다.

카카오엔터테인먼트FE
카카오엔터테인먼트FE
프론트엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...