본문 바로가기
프로그래밍/Front-end

자바스크립트로 엔터키 폼 전송 막는 방법

by @GodWin 2024. 12. 11.

-

 

-

웹사이트에서 폼을 작성할 때, 사용자가 실수로 **엔터키(Enter)**를 눌러 폼이 제출되는 일이 있죠?
예를 들어, 로그인 폼이나 검색창에서 엔터키를 눌러서 페이지가 새로고침되거나 입력값이 전송되는 일이 생기면 당황스러울 수 있습니다.
이런 문제를 해결하려면 엔터키로 인한 폼 제출을 막는 방법을 알아두면 유용해요!

오늘은 자바스크립트와 jQuery를 활용해서 엔터키로 인한 폼 제출을 막는 간단한 방법을 알려드릴게요.
이 방법을 사용하면 실수로 엔터키를 눌러 폼이 제출되는 상황을 예방할 수 있습니다.

1. 엔터키로 인한 폼 전송 문제

HTML 폼에서 사용자가 **엔터키(Enter)**를 누르면 대부분 자동으로 폼이 제출됩니다.
특히 폼 안에 텍스트 입력 필드가 있을 경우, 엔터키를 눌러 검색을 하거나 로그인하는 동작을 하게 되는데, 의도치 않게 페이지가 새로고침되거나 데이터가 전송되는 상황이 발생할 수 있죠.

예를 들어, 검색 폼이나 로그인 폼에서 엔터키를 눌렀을 때 폼이 바로 제출되면 사용자가 실수로 데이터를 보내는 상황이 생길 수 있습니다.
이럴 때는 엔터키가 눌렸을 때 폼 전송을 막는 방법을 사용하는 게 좋습니다.

 

2. 자바스크립트로 엔터키 눌림 막기

자바스크립트에서는 keydown 이벤트를 사용해서 키보드 입력을 감지할 수 있습니다.
이 이벤트를 통해 엔터키(키 코드 13)가 눌렸을 때, preventDefault() 메서드를 사용하여 폼이 제출되는 기본 동작을 차단할 수 있어요.

$(window).on('load', function() {
    // 'keydown' 이벤트 리스너 추가
    document.addEventListener('keydown', function(event) {
        // 엔터키가 눌렸을 때 (keyCode 13)
        if (event.keyCode === 13) {
            // 기본 동작(폼 전송)을 막음
            event.preventDefault();
        }
    }, true);
});

이 코드는 페이지가 로드되면 엔터키가 눌렸을 때 폼 제출을 막는 기능을 합니다.
엔터키가 눌리면 기본 동작인 폼 전송을 방지하게 되죠. 이제 실수로 엔터키를 눌러도 폼이 제출되지 않아요!

 

3. 코드 설명

  • $(window).on('load', function() {...});: 페이지가 완전히 로드된 후에 코드가 실행되도록 해줍니다.
  • document.addEventListener('keydown', function(event) {...}, true);: 키가 눌렸을 때마다 이벤트가 실행되도록 하는 코드입니다. 여기서는 keydown 이벤트를 사용하여 키보드 입력을 감지합니다.
  • if (event.keyCode === 13) {...}: keyCode가 13인 경우, 즉 엔터키가 눌렸을 때만 실행됩니다.
  • event.preventDefault();: 엔터키로 인해 발생하는 기본 동작(폼 제출)을 막는 역할을 합니다.

 

4. 최신 자바스크립트 방식: event.key === 'Enter'

최근에는 event.keyCode 대신 event.key를 사용하는 방법이 더 직관적이고 권장됩니다.
event.key는 키보드에서 눌린 키의 문자열 값을 반환하므로, 코드가 더 깔끔하고 읽기 쉬워요.

$(window).on('load', function() {
    document.addEventListener('keydown', function(event) {
        // 엔터키가 눌렸을 때
        if (event.key === 'Enter') {
            event.preventDefault(); // 폼 제출 막기
            alert('엔터키를 눌렀습니다. 폼 제출이 막혔습니다.');
        }
    }, true);
});

위 코드에서는 **event.key === 'Enter'**로 엔터키를 감지합니다.
이렇게 하면 코드가 더 읽기 쉽고, 의도한 대로 정확하게 작동해요.

 

5. HTML 폼 예시

위 자바스크립트 코드가 잘 작동하는지 확인해보기 위해 간단한 HTML 폼을 만들어볼게요.
아래 코드는 사용자가 엔터키를 눌렀을 때 폼이 제출되지 않도록 막는 예시입니다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>엔터키 폼 전송 막기</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        $(window).on('load', function() {
            document.addEventListener('keydown', function(event) {
                if (event.key === 'Enter') {
                    event.preventDefault(); // 폼 제출 막기
                    alert('엔터키를 눌렀습니다. 폼 제출이 막혔습니다.');
                }
            }, true);
        });
    </script>
</head>
<body>

    <form id="myForm">
        <input type="text" name="name" placeholder="이름">
        <input type="submit" value="제출">
    </form>

</body>
</html>

위 코드에서 사용자가 엔터키를 누르면 폼 제출이 차단되고, 알림창이 뜨게 됩니다.
이렇게 테스트를 해보면 폼이 실수로 제출되는 것을 막을 수 있죠!

이제 여러분도 자바스크립트를 사용해서 엔터키로 인한 폼 전송 문제를 쉽게 해결할 수 있게 되었습니다!
keydown 이벤트와 preventDefault()를 활용하면 엔터키가 눌렸을 때 폼 제출을 방지할 수 있어요.
최신 자바스크립트 방식인 event.key === 'Enter'를 사용하면 더 직관적이고 깔끔하게 구현할 수 있다는 점도 기억해두세요.