jquery - как запретить выполнение следующей страницы, если не введены обязательные поля? - PullRequest
0 голосов
/ 21 марта 2020

У меня есть простая форма, как показано ниже:

enter image description here

Процесс прост, вам нужно заполнить детали первой вкладки и перейдите к следующей вкладке и, наконец, к последней вкладке и зарегистрируйтесь. Все поля в каждой вкладке обязательны для заполнения. Я подумал, что лучший способ выполнить проверку на стороне клиента - это проверять каждую вкладку каждый раз, когда кто-то нажимает следующую кнопку.

Я пытался реализовать ее, используя проверку jquery через:

  <div class="card-body">

                <!-- Dealer Registration Form -->
                <form method="POST" action="{{ route('register') }}" id="register-form">
                    @csrf
                    <div class="tab-content" id="myTabContent">
                        <!-- Registration  Tab-->
                        <div class="tab-pane fade show active" id="registration" role="tabpanel" aria-labelledby="registration-tab">
                            <h5 class="text-center" style="background-color: #303030; color: #ffffff; padding: .5rem; border: 1px solid #e5e5e5;">Account Particulars</h5>
                            <div class="form-row">
                                <div class="form-group col-md-12">
                                    <label for="email">Email</label>
                                    <input type="email" name="email" class="form-control" required id="email" placeholder="Email">
                                </div>
                                <div class="form-group col-md-12">
                                    <label for="password">Password</label>
                                    <input type="password" name="password" class="form-control" required id="password">
                                </div>

                                <div class="form-group col-md-12">
                                    <label for="password-confirm">Confirm Password</label>
                                    <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
                                </div>
                            </div>

                            <!-- Next Button -->
                            <div class="text-right">
                                <!-- <a class="btn btn-secondary next-button" id="information-tab" data-toggle="tab" href="#information" role="tab" aria-controls="profile" aria-selected="false">Next</a> -->
                                <a class="btn btn-secondary next-button" id="next-btn">Next</a>
                            </div>
                        </div>

                        <!-- Information Tab -->
                        <div class="tab-pane fade" id="information" role="tabpanel" aria-labelledby="information-tab">
                            <!-- Personal Particulars -->
                            <h5 class="text-center" style="background-color: #303030; color: #ffffff; padding: .5rem; border: 1px solid #e5e5e5;">Personal Particulars</h5>
                            <div class="form-row">
                                <div class="form-group col-md-6">
                                    <label for="full_name">Full Name (as per NRIC)</label>
                                    <input type="text" name="full_name" class="form-control" id="full_name" placeholder="Full Name">
                                </div>
                                <div class="form-group col-md-6">
                                    <label for="nric">NRIC Number</label>
                                    <input type="text" name="nric" class="form-control" id="nric" placeholder="NRIC Number">
                                </div>
                            </div>

                            <div class="form-row">
                                <div class="form-group col-md-12">
                                    <label for="address_1">Address Line 1</label>
                                    <input type="text" name="address_1" id="address_1" class="form-control" placeholder="Residential Address Line 1">
                                </div>
                                <div class="form-group col-md-12">
                                    <label for="address_1">Address Line 2</label>
                                    <input type="text" name="address_2" id="address_2" class="form-control" placeholder="Residential Address Line 1">
                                </div>
                                <div class="form-group col-md-12">
                                    <label for="address_1">Address Line 3</label>
                                    <input type="text" name="address_3" id="address_3" class="form-control" placeholder="Residential Address Line 1">
                                </div>
                            </div>

                            <div class="form-row">
                                <div class="form-group col-md-6">
                                    <label for="postcode">Postcode</label>
                                    <input type="text" name="postcode" id="postcode" class="form-control" placeholder="Postcode">
                                </div>
                                <div class="form-group col-md-6">
                                    <label for="city">City</label>
                                    <input type="text" name="city" id="city" class="form-control" placeholder="City">
                                </div>
                                <div class="form-group col-md-12">
                                    <label for="state">State</label>
                                    <select name="state" id="state" class="form-control">
                                        <option disabled selected>Choose your state..</option>
                                        @foreach($states as $state)
                                        <option class="text-capitalize" value="{{ $state->id }}">{{ $state->name }}</option>
                                        @endforeach
                                    </select>
                                </div>
                            </div>

                            <div class="form-row">
                                <div class="form-group col-md-6">
                                    <label for="contact_number_home">Contact Number (Home)</label>
                                    <input type="text" name="contact_number_home" class="form-control" placeholder="Home Contact Number">
                                </div>
                                <div class="form-group col-md-6">
                                    <label for="contact_number_mobile">Contact Number (Mobile)</label>
                                    <input type="text" name="contact_number_mobile" class="form-control" placeholder="Mobile Contact Number">
                                </div>
                            </div>

                            <div class="form-row">
                                <div class="col-12">
                                    <label style="display: block;" for="existing_customer_options">Are you an existing Destiny Code customer?</label>
                                    <div class="form-check form-check-inline">
                                        <input type="radio" class="form-check-input" name="existing_customer" value="0" checked>
                                        <label class="form-check-label" for="existing_customer">No</label>
                                    </div>
                                    <div class="form-check form-check-inline">
                                        <input type="radio" class="form-check-input" name="existing_customer" value="1">
                                        <label class="form-check-label" for="existing_customer">Yes</label>
                                    </div>
                                </div>
                            </div>

                            <!-- Next Button -->
                            <div class="text-right">
                                <!-- <a class="btn btn-secondary next-button" id="agreement-tab" data-toggle="tab" href="#agreement" role="tab" aria-controls="profile" aria-selected="false">Next</a> -->
                                <a class="btn btn-secondary next-button">Next</a>
                            </div>
                        </div>

                        <div class="tab-pane fade" id="agreement" role="tabpanel" aria-labelledby="agreement-tab">
                            <h5 class="text-center" style="background-color: #303030; color: #ffffff; padding: .5rem; border: 1px solid #e5e5e5;">Agreement</h5>

                            <!-- Registration Agreement -->
                            <div class="row">
                                <div class="col-12 mb-0">
                                    <div class="overflow-auto agreement">

....... и т. д.

Сценарий:

 // Validate each input tab before moving to the next tab

    $(document).ready(function() {
    $("#register-form").validate({
        rules: {
            email: {
              required: true,
              // Specify that email should be validated
             // by the built-in "email" rule
             email: true
                   },
                 password: {
                 required: true,
                 minlength: 10
                 },
            password_confirmation:"required"
        },
        messages: {
            email: "Please enter an email",
            password: "Please enter a password",
            password_confirmation: "Please confirm your password"
        }
    });

    $('#next-btn').on('click',function() {
            event.preventDefault();
            $("#register-form").valid();
        });

    });

Проблема в том, что я все еще могу перейти к следующей вкладке, даже если ничего не вводится, хотя в сообщении об ошибке спрашивается для ввода показывает. Как мне заставить это работать?

Редактировать:

 // Validate each input tab before moving to the next tab


$(document).ready(function() {
    $("#register-form").validate({
        rules: {
        email: {
              required: true,
              // Specify that email should be validated
             // by the built-in "email" rule
             email: true
                   },
        password: {
                 required: true,
                 minlength: 8,

                 },
        password_confirmation:{
            required: true,
            minlength: 8,
            equalTo: "#password"

        }
        },
        messages: {
            email: "Please enter an email",
            password: "Please enter a password",
            password_confirmation: "Password does not match"
        }
    });

    $('#next-btn').on('click',function(e) {


       if( $("#register-form").valid()) {


        currentTab.removeClass('active');
        nextTab.find('a').trigger('click');
        nextTab.addClass('active');
        currentTab = $('.nav-tabs > .active');
        nextTab = currentTab.next('li');
          }else{
        e.preventDefault();   



    }
});
});

1 Ответ

0 голосов
/ 21 марта 2020

Отключите кнопку до тех пор, пока форма не станет действительной.

 $('input').on('blur', function() {
    if($("#register-form").valid()) {
        $("#next-btn").prop('disabled', false);  
    } else {        
        $("#next-btn").prop('disabled', 'disabled');
    }
});

Также установите следующую кнопку для первоначального набора номера

disabled="disabled" />

JSFiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...