728x90
반응형
checkValidity(): <form>안에 유효성체크값이 잘 처리되면 true반환함수
call-> filter 주체변경(Array->forms)하여 사용
 
novalidate : required가 있어도 무시
 
a
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.js"></script>
</head>
<body>
    <div class="container">
        <h2>Form Validation</h2>
        <p>다음 예제에서는 <code>.needs-validation</code>을 사용하여 양식을 제출한 후
        (누락된 내용이 있는 경우 유효성 검사 효과를 추가합니다.</p>
        <p>입력 필드를 작성하기 전에 확인을 눌러 효과를 확인하십시오.</p>

        <form action="#" class="needs-validation" novalidate>
            <!-- novalidate : required가 있어도 무시 -->
        <!-- <form action="#" class="needs-validation"> -->
            <div class="form-group">
                <label for="uname">이름 : </label>
                <input type="text" class="form-control" id="uname" placeholder="이름을 입력해주세요."
                name="uname">
                <div class="valid-feedback">유효성검사</div>
                <div class="invalid-feedback">이 필드를 작성해 주세요.</div>
            </div>

            <div class="form-group">
                <label for="pwd">비밀번호 : </label>
                <input type="password" class="form-control" id="pwd" placeholder="비밀번호를 입력해주세요."
                name="pswd" required>
                <div class="valid-feedback">유효성검사</div>
                <div class="invalid-feedback">이 필드를 작성해 주세요.</div>
            </div>
            
            <div class="form-group">
                <label class="form-check-label">
                <input type="checkbox" class="form-check-label" name="remember" required>
                양식제출에 동의합니다.
                <div class="valid-feedback">유효성검사</div>
                <div class="invalid-feedback">계속하려면 이 확인란을 체크해주세요.</div>
            </label>
            </div>

            <button type="submit" class="btn btn-primary">확인</button>
            
        </form>
    </div>
    <script>
        // 잘못된 필드가 있는 경우 양식 제출 사용 안 함
        (function(){
            window.addEventListener('load', function(){
                // 유효성 검사 스타일을 추가할 양식 가져오기
                var forms = document.getElementsByClassName('needs-validation');

                // 반복하여 제출 방지
                var Validation = Array.prototype.filter.call(forms, function(form){
                    // call-> filter 주체변경(Array->forms)하여 사용
                    form.addEventListener('submit', function(event){
                        // if(form.checkValidity() === false {
                            if(!form.checkValidity()){
                                // checkValidity(): <form>안에 유효성체크값이 잘 처리되면 true반환함수
                                // preventDefault() : 기본 이벤트 방지
                                event.preventDefault();
                            } //if문 종료괄호
                            // jQuery의 addClass()와 동일
                            form.classList.add('was-validated'); 
                            //classList로 배열로 가져와라
                            //class="needs-validation was-validated"
                        }, false); //form.addEventListener('submit' ~~~) 함수호출문 종료
                        // false(버블링) event전파 조상->자식 default값
                    }); //call() 함수호출문 종료
                }, false); //load함수호출문 
            })();
            $(function(){
                var forms = $('.needs-validation');
 
                forms.filter(function(i,o){
                    $(o).on('submit',function(e){
                        if(!o.checkValidity()){
                            e.preventDefault();
                        }
                        $(o).addClass('was-validated');
                    });
                });
            });
    </script>
</body>
</html>
728x90
반응형

'[JS]' 카테고리의 다른 글

[Bootstrap] carousel, icon  (0) 2024.03.12
[Bootstrap] navbar  (0) 2024.03.12
[Bootstrap] grid, button  (0) 2024.03.11
[Bootstrap] container, col  (0) 2024.03.11
jqueryui  (0) 2024.03.11

+ Recent posts