Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 자동완성 기능 구현하기 - datalist와 keyup 이벤트 활용법

웹 애플리케이션에서 자동완성(Auto Complete) 또는 추천(Suggestion) 기능은 사용자 경험을 크게 향상시키는 중요한 요소입니다. 자바스크립트를 활용하면 별도의 외부 라이브러리 없이도 간단하게 이 기능을 구현할 수 있습니다.

아래 예제에서는 HTML의 <datalist> 요소와 자바스크립트의 keyup 이벤트를 조합하여, 사용자가 입력한 값에 따라 옵션 목록을 실시간으로 필터링하는 자동완성 기능을 만들어 보겠습니다.

예제 코드

<!DOCTYPE html>
<html>
<head>
<style>
    body{
        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    }
</style>
</head>
<body>
<h1>JavaScript Auto Complete / Suggestion feature</h1>
<input type="text" list="datalist" class="fruits" />
<datalist id="datalist">
<option value="orange"></option>
<option value="apple"></option>
<option value="pineapple"></option>
<option value="guava"></option>
<option value="mango"></option>
<option value="peach"></option>
<option value="pomegranate"></option>
<option value="litchi"></option>
</datalist>
<script type="text/javascript">
    var tags = ["orange", "apple","pineapple","guava","mango","pomegranate","litchi"];
    let check;
    document.querySelector(".fruits").addEventListener("keyup", (event) => {
        let value = event.target.value;
        document.getElementById("datalist").innerHTML = "";
        tags.forEach((item) => {
            if (item.toLowerCase().indexOf(value.toLowerCase()) > -1) {
                var opt = document.createElement("option");
                var sel = document.createTextNode(item);
                opt.appendChild(sel);
                document.getElementById("datalist").appendChild(opt);
            }
        });
    });
</script>
</body>
</html>

코드 동작 원리

  • <datalist> 요소: 입력 필드에 연결되어 드롭다운 형태의 제안 목록을 제공합니다. <input> 태그의 list 속성으로 datalist의 id를 지정하면 두 요소가 연결됩니다.
  • keyup 이벤트: 사용자가 키보드로 글자를 입력할 때마다 이벤트가 발생하며, 그때마다 입력값을 읽어옵니다.
  • 대소문자 무시 검색: toLowerCase() 메서드로 입력값과 후보 단어를 모두 소문자로 변환한 뒤 비교하므로, 대소문자 구분 없이 일치 여부를 판단합니다.
  • 목록 갱신: 매 입력마다 기존 옵션을 모두 삭제(innerHTML = "")하고, 조건에 맞는 항목만 새로운 <option> 요소로 추가하여 최신 상태를 유지합니다.

실행 결과

페이지를 열면 다음과 같이 과일 이름을 입력할 수 있는 텍스트 필드가 화면에 나타납니다.

자바스크립트 자동완성 기능 구현하기 - datalist와 keyup 이벤트 활용법

입력 필드에 글자를 입력하면, 포함된 문자열이 있는 과일 이름만 실시간으로 목록에 표시됩니다. 예를 들어 'a'를 입력하면 apple, mango, guava 등 해당 글자가 포함된 항목들만 제안됩니다.

자바스크립트 자동완성 기능 구현하기 - datalist와 keyup 이벤트 활용법