웹 애플리케이션에서 자동완성(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>요소로 추가하여 최신 상태를 유지합니다.
실행 결과
페이지를 열면 다음과 같이 과일 이름을 입력할 수 있는 텍스트 필드가 화면에 나타납니다.

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