유효성 검사 실패시 부트 스트랩 양식이 제출을 취소하지 않음

Shir Cohen

제출시 사용자에게 이메일을 보낼 양식을 만들려고합니다.

문제는 내가 Bootstrap의 양식 템플릿을 사용했으며 전화로 제출하고 잘못된 값을 우편으로 보내면 (전화 번호가 비어 있더라도) 이메일이 어쨌든 전송되고 (200 확인) 성공 경고가 표시됩니다.

내 HTML 코드는 다음과 같습니다.

<form class="needs-validation" novalidate id="paymentForm">
                        <div class="row">
                            <div class="col-md-6 mb-3">
                                <label for="firstName">First Name</label>
                                <input type="text" class="form-control" name="firstName" id="firstName" placeholder="" value="" required>
                                <div class="invalid-feedback">
                                    required Feild
                                </div>
                            </div>
                            <div class="col-md-6 mb-3">
                                <label for="lastName">Lasr Name</label>
                                <input type="text" class="form-control" name="lastName" id="lastName" placeholder="" value="" required>
                                <div class="invalid-feedback">
                                    required Feild
                                </div>
                            </div>
                        </div>

                        <div class="mb-3">
                            <label for="email">Email</label>
                            <input type="email" class="form-control" value="" name="email" id="email" placeholder="[email protected]" required>
                            <div class="invalid-feedback">
                                please enter a valid mail address
                            </div>
                        </div>

                        <div class="mb-3">
                            <label for="phone">Phone Number</label>
                            <input type="tel" class="form-control" value="" name="phone" placeholder="example: 050-1111111" pattern="[0]{1}[5]{1}[0-9]{8}" id="phone" required>
                            <div class="invalid-feedback">
                                please provide a valid phone number
                            </div>
                        </div>

                        <div class="mb-3">
                            <label for="address"> address</label>
                            <input type="text" class="form-control" name="address" id="address" placeholder="" required>
                            <div class="invalid-feedback">
                              please provide your address
                            </div>
                        </div>
                        <hr class="mb-4">

                        <h4 class="mb-3">payment method</h4>
                        <div class="d-block my-3">
                            <div class="custom-control custom-radio">
                                <input id="cash" value="cash" value="cash" name="paymentMethod" type="radio" class="custom-control-input" required checked>
                                <label class="custom-control-label" for="cash">cash</label>
                            </div>
                            <div class="custom-control custom-radio">
                                <input id="bit" value="bit" value="bit" name="paymentMethod" type="radio" class="custom-control-input" required>
                                <label class="custom-control-label" for="bit">Bit</label>
                            </div>
                        </div>
                        <div class="invalid-feedback">
                            please choose method
                        </div>

                        <hr class="mb-4">
                        <button class="btn btn-primary btn-lg btn-block" type="submit">continue to checkout</button>

                    </form>

그리고 여기 내 js가 있습니다.

(function() {
    'use strict'
    window.addEventListener('load', function() {       
        var forms = document.getElementsByClassName('needs-validation')       
        Array.prototype.filter.call(forms, function(form) {
            form.addEventListener('submit', function(event) {

                var radioValue = $('#paymentForm input:radio:checked').val()
                if (form.checkValidity() === false) {
                    event.preventDefault();
                    event.stopPropagation();
                }
                form.classList.add('was-validated')
                var orderNumber = generateId();
                var cName = $('#firstName').val() + " " + $('#lastName').val()
                var cEmail = $('#email').val()
                var cPhone = $('#phone').val()
                var cAddress = $('#address').val()
                var cSumToPay = parseInt(localStorage.getItem("totalPrice"));
                var cProducts = JSON.parse(localStorage.getItem("products") || "[]");
                cProducts = cProducts.map(Object.values);                   
                cProducts = cProducts.join(' ');
                console.log(cProducts);
                var templateParams = {
                    order_number: orderNumber,
                    customer_name: cName,
                    products: cProducts,
                    addres: cAddress,
                    phone: cPhone,
                    customer: cEmail,
                    payment_Methode: radioValue,
                    customer_sum: cSumToPay
                };
                emailjs.send('gmail', 'orderconfirmation', templateParams)
                    .then(function(response) {
                        console.log('SUCCESS!', response.status, response.text);
                        alert('Yey! Your email was sent :)');           
                    }, function(error) {
                        console.log('error');
                        alert(error);
                    });
                event.preventDefault();
            }, false)
        })
    }, false)

}())

도와 주시면 감사하겠습니다 !!!

에드 루카스

이 섹션은 유효성 검사를위한 유일한 검사 인 것으로 보입니다.

            if (form.checkValidity() === false) {
                event.preventDefault();
                event.stopPropagation();
            }

그러나, event.preventDefault()event.stopPropagation()다음 섹션을 통해 떨어지는 코드를 방지하지 않을 수 있습니다. 이 시점에서 반품을 포함하면됩니다.

            if (form.checkValidity() === false) {
                event.preventDefault();
                event.stopPropagation();
                return false;
            }

또는 else조건부 에서 나머지 코드를 래핑 할 수 있습니다.

            if (form.checkValidity() === false) {
                event.preventDefault();
                event.stopPropagation();
            } else {
                // your email handling code
            }

참고 : event.preventDefault()제출 버튼이 양식 제출의 기본 동작을 수행하는 것을 중지하고 event.stopPropagation()이벤트가 부모 요소 (필요하지 않을 수 있음)까지 버블 링되지 않도록하는 것이 유용합니다 . 참조 : https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefaulthttps://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation

어쨌든 event.preventDefault()이벤트 리스너 맨 위에 단일 호출을 배치하면 두 번의 호출이 필요하지 않습니다.

form.addEventListener('submit', function(event) {
    event.preventDefault();
    ...

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

여러 jQuery 유효성 검사 부트 스트랩 플러그인이 여러 양식의 유효성을 검사하지 않습니다.

분류에서Dev

부트 스트랩 양식이 유효하지 않은 경우 Jquery 유효성 검사기가 제출합니다.

분류에서Dev

부트 스트랩 유효성 검사를 사용하여 양식을 제출하는 방법

분류에서Dev

부트 스트랩 오류 유효성 검사 색상이 표시되지 않음

분류에서Dev

부트 스트랩 모달 유효성 검사 웹 양식 + 하나만 표시

분류에서Dev

jQuery 양식 유효성 검사가 부트 스트랩에서 작동하지 않음

분류에서Dev

angular2에서 부트 스트랩 양식 유효성 검사가 작동하지 않음

분류에서Dev

부트 스트랩 모달에서 Javascript 양식 유효성 검사가 작동하지 않음

분류에서Dev

양식 제출시 양식 유효성 검사를 수행하는 동안 구성 요소가 React에서 업데이트되지 않습니다.

분류에서Dev

양식 유효성 검사가 작동하지 않는 이유는 무엇입니까 (제출시 트리거되지 않음)?

분류에서Dev

양식이 값을 업데이트하지 않고 유효성 검사가 실패하지만 오류가 없음

분류에서Dev

부트 스트랩이있는 Codeigniter 양식 유효성 검사 오류 메시지

분류에서Dev

부트 스트랩 양식 유효성 검사-필드가 비어 있지 않고 유효한 URL을 포함하는지 확인

분류에서Dev

입력 값이 올바르지 않을 때 메시지를 표시하지 않도록 부트 스트랩 유효성 검사기를 설정하는 방법

분류에서Dev

입력 값이 올바르지 않을 때 메시지를 표시하지 않도록 부트 스트랩 유효성 검사기를 설정하는 방법

분류에서Dev

부트 스트랩 텍스트 상자 옆에 Jquery 양식 유효성 검사 메시지 표시

분류에서Dev

양식 유효성 검사가 수행되지 않음, 스프링 부트

분류에서Dev

양식 제출시 Javascript 유효성 검사가 실행되지 않음

분류에서Dev

부트 스트랩 4가 암호 유효성 검사가 작동하지 않음을 확인합니다.

분류에서Dev

자바 스크립트 양식 유효성 검사가 유효성을 검사하지 않습니다.

분류에서Dev

유효성 검사 실패시 양식 제출을 차단할 수 없음

분류에서Dev

Codeigniter 양식 유효성 검사를 사용하는 부트 스트랩 모달

분류에서Dev

부트 스트랩 모달을 닫은 후 angularjs의 양식 유효성 검사를 재설정하는 방법

분류에서Dev

부트 스트랩을 사용하는 jquery 유효성 검사 오류 메시지가 제대로 작동하지 않습니다.

분류에서Dev

양식 유효성 검사 후 양식이 제출되지 않음

분류에서Dev

양식 제출을위한 2 개의 버튼 (제출 및 저장)이있는 Formik React-유효성 검사를 트리거하지 않는 저장 버튼

분류에서Dev

양식 제출을위한 2 개의 버튼 (제출 및 저장)이있는 Formik React-유효성 검사를 트리거하지 않는 저장 버튼

분류에서Dev

AJAX를 통해 양식을 제출하지만 클라이언트 측 유효성 검사는 유지

분류에서Dev

자바 스크립트 양식 유효성 검사가 작동하지 않음

Related 관련 기사

  1. 1

    여러 jQuery 유효성 검사 부트 스트랩 플러그인이 여러 양식의 유효성을 검사하지 않습니다.

  2. 2

    부트 스트랩 양식이 유효하지 않은 경우 Jquery 유효성 검사기가 제출합니다.

  3. 3

    부트 스트랩 유효성 검사를 사용하여 양식을 제출하는 방법

  4. 4

    부트 스트랩 오류 유효성 검사 색상이 표시되지 않음

  5. 5

    부트 스트랩 모달 유효성 검사 웹 양식 + 하나만 표시

  6. 6

    jQuery 양식 유효성 검사가 부트 스트랩에서 작동하지 않음

  7. 7

    angular2에서 부트 스트랩 양식 유효성 검사가 작동하지 않음

  8. 8

    부트 스트랩 모달에서 Javascript 양식 유효성 검사가 작동하지 않음

  9. 9

    양식 제출시 양식 유효성 검사를 수행하는 동안 구성 요소가 React에서 업데이트되지 않습니다.

  10. 10

    양식 유효성 검사가 작동하지 않는 이유는 무엇입니까 (제출시 트리거되지 않음)?

  11. 11

    양식이 값을 업데이트하지 않고 유효성 검사가 실패하지만 오류가 없음

  12. 12

    부트 스트랩이있는 Codeigniter 양식 유효성 검사 오류 메시지

  13. 13

    부트 스트랩 양식 유효성 검사-필드가 비어 있지 않고 유효한 URL을 포함하는지 확인

  14. 14

    입력 값이 올바르지 않을 때 메시지를 표시하지 않도록 부트 스트랩 유효성 검사기를 설정하는 방법

  15. 15

    입력 값이 올바르지 않을 때 메시지를 표시하지 않도록 부트 스트랩 유효성 검사기를 설정하는 방법

  16. 16

    부트 스트랩 텍스트 상자 옆에 Jquery 양식 유효성 검사 메시지 표시

  17. 17

    양식 유효성 검사가 수행되지 않음, 스프링 부트

  18. 18

    양식 제출시 Javascript 유효성 검사가 실행되지 않음

  19. 19

    부트 스트랩 4가 암호 유효성 검사가 작동하지 않음을 확인합니다.

  20. 20

    자바 스크립트 양식 유효성 검사가 유효성을 검사하지 않습니다.

  21. 21

    유효성 검사 실패시 양식 제출을 차단할 수 없음

  22. 22

    Codeigniter 양식 유효성 검사를 사용하는 부트 스트랩 모달

  23. 23

    부트 스트랩 모달을 닫은 후 angularjs의 양식 유효성 검사를 재설정하는 방법

  24. 24

    부트 스트랩을 사용하는 jquery 유효성 검사 오류 메시지가 제대로 작동하지 않습니다.

  25. 25

    양식 유효성 검사 후 양식이 제출되지 않음

  26. 26

    양식 제출을위한 2 개의 버튼 (제출 및 저장)이있는 Formik React-유효성 검사를 트리거하지 않는 저장 버튼

  27. 27

    양식 제출을위한 2 개의 버튼 (제출 및 저장)이있는 Formik React-유효성 검사를 트리거하지 않는 저장 버튼

  28. 28

    AJAX를 통해 양식을 제출하지만 클라이언트 측 유효성 검사는 유지

  29. 29

    자바 스크립트 양식 유효성 검사가 작동하지 않음

뜨겁다태그

보관