자바풀스택 과정/챗지피티 선생님 in 자바풀스택

챗지피티에게 물어본 textarea 요소에서 tab 키를 눌렀을 때 포커스가 아닌 들여쓰기로 동작하기 위한 방법

파티피플지선 2025. 3. 20. 14:44

HTML의 textarea 요소에서는 기본적으로 Tab 키를 누르면 포커스가 다른 요소로 이동하는데, 이를 들여쓰기를 위해 사용하려면 자바스크립트를 이용해 Tab 키의 동작을 수정할 수 있습니다.
다음은 Tab 키를 눌렀을 때 textarea 내에서 들여쓰기 기능을 구현하는 예제입니다:

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Textarea Tab 들여쓰기</title>
    <style>
        textarea {
            width: 100%;
            height: 200px;
            font-family: monospace;
            font-size: 16px;
        }
    </style>
</head>
<body>
    <textarea id="myTextarea" placeholder="여기에 작성하세요..."></textarea>

    <script>
        const textarea = document.getElementById('myTextarea');

        textarea.addEventListener('keydown', function(event) {
            // Tab 키의 keyCode는 9입니다
            if (event.key === 'Tab') {
                event.preventDefault(); // 기본 Tab 동작(포커스 이동)을 방지

                const start = textarea.selectionStart;
                const end = textarea.selectionEnd;

                // 커서 위치에 탭을 삽입
                textarea.value = textarea.value.substring(0, start) + '\t' + textarea.value.substring(end);

                // 커서 위치를 탭 뒤로 이동
                textarea.selectionStart = textarea.selectionEnd = start + 1;
            }
        });
    </script>
</body>
</html>

설명:

  • textarea.addEventListener('keydown', function(event) {...});: textarea에서 키를 눌렀을 때 이벤트를 처리합니다.
  • if (event.key === 'Tab') {...}: Tab 키가 눌렸을 때만 동작하도록 합니다.
  • event.preventDefault(): 기본 동작인 포커스를 다른 요소로 이동하는 것을 막습니다.
  • 커서 위치(selectionStart와 selectionEnd)를 기준으로 \t (탭 문자)를 삽입합니다.
  • 삽입된 후 커서 위치를 탭 뒤로 이동시켜줍니다.

이 코드를 사용하면, textarea 내에서 Tab 키를 누를 때마다 커서 위치에 들여쓰기를 추가할 수 있습니다.