폼 전송하기: submit 이벤트

submit 이벤트란?

submit 이벤트는 사용자가 폼을 제출하려고 할 때 발생합니다. 주로 폼의 데이터를 검증하거나, 특정 조건에 따라 전송을 막을 때 사용합니다.

폼이 제출되는 시점

  • 제출 버튼 클릭: <input type="submit"> 또는 <button type="submit"> 요소를 클릭할 때.
  • Enter 키 입력: 폼 내의 인풋 필드에서 Enter 키를 누를 때.

이 두 경우 모두 폼의 submit 이벤트가 트리거됩니다.

이벤트 핸들러에서의 검증

submit 이벤트 핸들러에서는 폼 데이터의 유효성을 검증하고, 오류가 있을 경우 전송을 막을 수 있습니다. 이를 위해 event.preventDefault()를 사용합니다.

const form = document.querySelector('form');

form.addEventListener('submit', (event) => {
  const input = form.querySelector('input[name="username"]');
  if (input.value.trim() === '') {
    alert('사용자 이름을 입력해주세요.');
    event.preventDefault(); // 폼 전송 막기
  }
});

submit 이벤트와 click 이벤트의 관계

인풋 필드에서 Enter 키를 눌러 폼을 제출하면 해당 폼의 제출 버튼에 click 이벤트가 발생합니다. 실제 클릭이 없었음에도 불구하고 이벤트가 발생하므로, 이벤트 핸들러를 작성할 때 이를 고려해야 합니다.

<form>
  <input type="text" name="search" placeholder="검색어를 입력하세요">
  <button type="submit" onclick="console.log('버튼 클릭 이벤트 발생')">검색</button>
</form>

submit() 메서드로 폼 전송하기

submit() 메서드를 사용하면 자바스크립트로 직접 폼을 전송할 수 있습니다.

submit() 메서드의 특징

  • submit() 메서드를 호출하면 submit 이벤트가 발생하지 않습니다. 이는 개발자가 이미 필요한 처리를 했음을 의미합니다.
  • 폼을 동적으로 생성하여 전송할 때 유용합니다.

동적으로 폼 생성 및 전송하기

const form = document.createElement('form');
form.method = 'POST';
form.action = '/search';

const input = document.createElement('input');
input.type = 'hidden';
input.name = 'query';
input.value = '자동 검색어';

form.appendChild(input);
document.body.appendChild(form);

form.submit();

예제: 데이터 검증 후 전송하기

<form id="emailForm">
  <label for="email">이메일 주소:</label>
  <input type="email" id="email" name="email" required>
  <button type="submit">가입하기</button>
</form>
<script>
const emailForm = document.getElementById('emailForm');

emailForm.addEventListener('submit', (event) => {
  const emailInput = emailForm.email.value;
  if (!validateEmail(emailInput)) {
    alert('유효한 이메일 주소를 입력해주세요.');
    event.preventDefault(); // 폼 전송 막기
  }
});

function validateEmail(email) {
  // 간단한 이메일 형식 검증
  return /\S+@\S+\.\S+/.test(email);
}
</script>

'브라우저' 카테고리의 다른 글

defer와 async로 최적화된 스크립트 로딩  (0) 2025.02.21
HTML 문서 생명주기  (0) 2025.02.21
폼 데이터 변경 이벤트 조작하기  (0) 2025.02.21
포커스와 블러 이벤트  (0) 2025.02.21
폼 조작 하기  (0) 2025.02.20