HTML5에서 추가된 폼 속성과 검증 이벤트 활용

1. 흐릿한 안내 텍스트 placeholder

사용자가 입력하기 전에 필드에 어떤 값을 입력해야 하는지 알려주는 텍스트를 표시할 수 있다.

<input type="email" name="userEmail" placeholder="이메일을 입력하세요">

placeholder 텍스트의 스타일은 ::placeholder 가상 요소 선택자로 바꿀 수 있다.

input::placeholder {
    color: #ff6600;
    font-size: 14px;
}

2. 페이지 로드 시 자동 포커스 autofocus

해당 속성을 추가하면 문서가 로드된 직후 해당 입력 필드로 커서가 자동으로 이동한다.

<input type="search" name="keyword" autofocus>

3. 자동완성 autocomplete

입력 필드에 autocomplete="on"을 설정하면 이전에 성공적으로 제출한 데이터를 기반으로 자동완성 목록을 보여준다. 데이터가 연결되려면 반드시 name 속성이 있어야 하며, 저장된 데이터와 name 값이 일치할 때만 표시된다.

<input type="text" name="userEmail" autocomplete="on">
<input type="text" name="hobby" autocomplete="off">

4. 필수 입력 required

값이 비어 있으면 폼 제출이 차단된다.

<input type="password" name="pwd" required>

5. 패턴 검증 pattern

정규표현식 조건에 맞지 않으면 제출이 막힌다. 패턴은 / 구분자 없이 작성한다.

<input type="tel" name="phone" pattern="^[0-9]{3}-[0-9]{4}-[0-9]{4}$">

6. 다중 선택 multiple

파일 선택과 이메일 입력에서 여러 값을 받을 수 있다.

<!-- 파일 여러 개 선택 -->
<input type="file" name="attachments" multiple>

<!-- 이메일 여러 개, 쉼표로 구분 -->
<input type="email" name="recipients" multiple>

7. 폼 외부 요소 연결 form

밖에 있는 입력 요소도 form 속성에 대상 폼의 id를 지정하면 해당 폼의 데이터로 제출된다.

<form id="joinForm"></form>

<input type="text" name="nickname" form="joinForm">

8. 값이 바뀔 때 oninput

입력값이 변경될 때마다 발생하며, 한 자씩 입력할 때도 계속 호출된다. 반면 change 이벤트는 입력이 끝나고 포스가 빠질 때 발생한다.

<input type="tel" id="phone">

<script>
    const phone = document.querySelector('#phone');

    phone.addEventListener('input', function () {
        console.log('입력 중:', this.value);
    });

    phone.addEventListener('change', function () {
        console.log('입력 완료:', this.value);
    });
</script>

9. 검증 실패 시 oninvalid

유효성 검사를 통과하지 못하면 발생하며, setCustomValidity()로 사용자 정의 메시지를 설정할 수 있다.

<input type="tel" name="mobile" pattern="^01[0-9]-[0-9]{4}-[0-9]{4}$">

<script>
    const mobile = document.querySelector('[name="mobile"]');

    mobile.addEventListener('invalid', function () {
        this.setCustomValidity('전화번호 형식이 올바르지 않습니다.');
    });

    mobile.addEventListener('input', function () {
        this.setCustomValidity('');
    });
</script>

10. 라우저 검증 끄기 novalidate

novalidate 속성을 추가하면 HTML5 기본 검증을 비활성화할 수 있다.

<!-- 마크업 방식 -->
<form id="joinForm" novalidate>
    ...
</form>

<!-- 스크립트 방식 -->
<script>
    document.querySelector('#joinForm').noValidate = true;
</script>

태그: html5 form-validation dom-events CSS-Pseudo-element HTML-Forms

8월 25일 15:28에 게시됨