I am having a web app using bootstrap 3, datatables, js and php.
I am facing two issues:
a) When i press SAVE button on modal, it sometimes taking more seconds to load the code. This has a result, that users press again SAVE button. The result is that the app is getting duclicate answer(row in the database).
b) When modal is load, user can see for 1 second data from previous open row.
I want to fix this two issues.
I am posting a part of the modal and js. As my modal has 15 input/select fields.
My html code(.php) of the page:
<div class="modal fade" id="update_appointment" tabindex="-4" role="dialog" aria-label="UpdateAppointmentModalLabel" aria-hidden="true" data-keyboard="false" data-backdrop="static">
    <div class="modal-dialog modal-customer" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
                <h5 class="modal-title">View Appointment</h5>
            </div>
            <form method="POST" id="UpdateAppointmentForm" enctype="multipart/form-data">
                <div class="modal-body">
                    <div class="row" id="UpdateAppointmentFormdiv">
                        <div class="col-xs-12">
                            <div class="form-group row">
                                <label for="upd_app_date" class="col-xs-2 col-form-label">Date:</label>
                                <div class="col-xs-2 form-group">
                                    <input id="upd_app_date" name="app_date" type="text" class="form-control date"/>
                                </div>
                            </div>
                            <div class="form-group row">
                                <label for="upd_work_id" class="col-xs-2 col-form-label">Work:</label>
                                <div class="col-xs-5 form-group">
                                    <select id="upd_work_id" name="work_id" class="form-control">
                                        <option value="">Please Select</option>
                                    </select>
                                </div>
                            </div>
                            <div class="form-group row">
                                <label for="upd_app_price" class="col-xs-2 col-form-label">Price:</label>
                                <div class="col-xs-2 form-group">
                                    <input id="upd_app_price" name="app_price" type="text" class="form-control price" value=""/>
                                </div>
                            </div>
                            <div class="form-group row">
                                <label for="upd_app_paid_to" class="col-xs-2 col-form-label">Paid To:</label>
                                <div class="col-xs-3 form-group">
                                    <select id="upd_app_paid_to" name="app_paid_to" class="form-control">
                                        <option value="">Please Select</option>
                                        <option value="0">Bill</option>
                                        <option value="1">John</option>
                                    </select>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="row" id="UpdateAppointmentFormloader" style="display:none;">
                        <div class="col-xs-12 text-center">
                            <i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i>
                            <span class="sr-only">Loading...</span>
                        </div>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                    <button type="submit" class="btn btn-primary">Save changes</button>
                </div>
            </form>
        </div>
    </div>
</div>
My js code of the modal submit button:
$('#UpdateAppointmentForm').submit(function(event) {
    event.preventDefault(); //prevent default action 
    upd_app_date = $('#upd_app_date').val();
    if (isValidDate(upd_app_date) === false) {
        alert("Appointment date is not valid.");
        return false;
    }
    if ($('#upd_work_id').val() != "") {
        upd_work = $('#upd_work_id option:selected').html();
    } else {
        upd_work = "";
    }
    if ($('#upd_app_paid_to').val() != "") {
        upd_app_paid_to = $('#upd_app_paid_to option:selected').html();
    } else {
        upd_app_paid_to = "";
    }
    
    html  = '<td>' + $('#upd_app_date').val() + '</td>';
    html += '<td>' + upd_work + '</td>';
    html += '<td class="text-right">' + $('#upd_app_price').val() + '</td>';
    html += '<td class="text-center">' + upd_app_paid_to + '</td>'; 
    html += '<td class=" text-center">';
    html += '<button type="button" class="btn btn-primary btn-sm same_button_td" onclick="viewAppoitment(\'' + $('#upd_app_id').val() + '\')"><i class="fa fa-eye" aria-hidden="true"></i></button> <button type="button" class="btn btn-success btn-sm same_button_td" onclick="editAppoitment(\'' + $('#upd_app_id').val() + '\', $(this))"><i class="fa fa-pencil" aria-hidden="true"></i></button></td>';
    
    app_paid_to = $('#upd_app_paid_to').val();
    if (app_paid_to != "") {
        if (price_paid.length == 0) {
            alert("Price Paid cannot be blank.");
            return false;
        }
        if (payment_id == "") {
            alert("Select Payment");
            return false;
        }
        if (receipt_id == "") {
            alert("Select Receipt");
            return false;
        }
    }
    var form_data = $("#UpdateAppointmentForm").serialize(); //Encode form elements for submission
    $('#UpdateAppointmentFormdiv').hide();
    $('#UpdateAppointmentFormloader').show();
    $.ajax({
        url: "api/customer.php?action=UpdateAppointment",
        type: "POST",
        data: form_data,
        dataType: 'json',
        success: function(result) {
            if (result.success == true) {
                $ele.parent().parent().html(html);
                html = '<div class="alert alert-success alert-dismissible" role="alert">' + result.message + '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button></div>';
                $('#appalertmsg').html(html);
                $('#appalert').slideDown();
                $('#UpdateAppointmentForm')[0].reset();
                $('#UpdateAppointmentFormdiv').show();
                $('#UpdateAppointmentFormloader').hide();
                $('#update_appointment').modal('hide');
            } else {
                html = '<div class="alert alert-warning alert-dismissible" role="alert">' + result.message + '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button></div>';
                $('#appalertmsg').html(html);
                $('#appalert').slideDown();
                $('#UpdateAppointmentFormdiv').show();
                $('#UpdateAppointmentFormloader').hide();
            }
        }
    });
});
Solution for my A problem.
If i put after event.preventDefault(); this lines:
    $('#UpdateAppointmentFormdiv').hide();
    $('#UpdateAppointmentFormloader').show();
will it fix my issue.
Solution for my B problem. I tried to use the following:
$('#update_appointment').on('hidden.bs.modal', function(){
    $('#upd_app_date').val('');
    $('#upd_work_id').val('');
    $('#upd_app_price').val('');
    $('#upd_app_paid_to').val('');
});
but with no success. Maybe i am having a small typo error in my code.
