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

setSelectionRange로 검색창 커서 옮기기

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

두줄요약

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

문제 상황

  • 긴 검색어가 입력된 검색창 재포커스 시 커서와 가로 스크롤을 텍스트 끝으로 이동해야 하는 요구
  • scrollLeft만 변경할 때 화면 위치와 실제 커서 위치가 불일치하는 현상

해결 방법

  • focus 이벤트에서 setSelectionRange(maxLength, maxLength)로 커서를 입력값 끝 위치로 지정
  • scrollLeft를 함께 변경해 커서가 있는 끝부분을 화면에 노출
  • setTimeout(..., 0)으로 브라우저의 클릭 위치 커서 이동 이후 로직 실행

원인 분석

  • focus 콜백이 input 클릭에 따른 브라우저 기본 커서 이동보다 먼저 실행되는 이벤트 타이밍 이슈
  • mouseup 방식의 키보드·스크린 리더 접근성 저하와 임의 커서 위치 지정 불가 문제

주의할 점

  • setSelectionRange는 text, search, url, tel, password 타입에서만 사용 가능
  • 0ms setTimeout도 즉시 실행이 아닌 다음 작업 시점으로 지연되는 특성

다음 읽기

#JavaScript 주제를 이어서 읽기

setSelectionRange로 검색창 커서 옮기기

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

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

댓글 0개

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

댓글을 불러오는 중...