我在将Ajax功能与 bootstrap 验证相结合时遇到了问题.我想这可能是Ajax函数中表单调用的问题.

邮箱按照PHP文件正确发送,但不使用Ajax功能.我没有收到任何错误,但Ajax调用被忽略.

我必须在Ajax函数中重新定义表单吗?

// Bootstrap forms validation
    var forms = document.querySelectorAll('.needs-validation')
    Array.prototype.slice.call(forms).forEach(function (form) {
        form.addEventListener('submit', function (event) {
            if (!form.checkValidity()) {
                form.querySelector(".form-control:invalid").focus();
                event.preventDefault()
                event.stopPropagation()
            }
            else {
                $.ajax({
                    type: "POST",
                    url: form.attr('action'),
                    datatype: "json",
                    data: form.serialize(),
                    beforeSend: function () {
                        form.find(":submit").html("Sending...").prop('disabled', true);
                    },
                    error: function (xhr, status, error) {
                        $(".toast").addClass('bg-danger');
                        $(".toast-body").text(xhr.status + ': ' + xhr.statusText);
                        $(".toast").toast("show");
                    },
                    success: function (data) {
                        if (data.success === true) {
                            form.removeClass('was-validated').trigger("reset");
                            $(".toast").addClass('bg-success');
                        }
                        else {
                            $(".toast").addClass('bg-danger');
                        }
                        $(".toast-body").text(data.message);
                        $(".toast").toast("show");
                    }
                });
            }
            form.classList.add('was-validated')
        }, false)
    });
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="contact-form" method="post" action="/inc/contact.php" autocomplete="off" class="contact card-body needs-validation" novalidate>
    <div class="row">
        <div class="col-xl-6">
            <div class="form-group">
                <input type="text" class="form-control" name="firstname" id="firstname"
                    placeholder="firstname" required>
            </div>
        </div>
        <div class="col-xl-6">
            <div class="form-group">
                <input type="text" class="form-control" name="lastname" id="lastname"
                    placeholder="Lastname" required>
            </div>
        </div>
        <div class="col-xl-6">
            <div class="form-group">
                <input type="email" class="form-control" name="email" id="email"
                    placeholder="Email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$"
                    required>
            </div>
        </div>
        <div class="col-xl-6">
            <div class="form-group">
                <input type="tel" class="form-control" name="phone" id="phone"
                    placeholder="Phone">
            </div>
        </div>
        <div class="col-md-12">
            <div class="form-group">
                <input type="text" class="form-control" name="subject" id="subject"
                    placeholder="Subject" required>
            </div>
        </div>
        <div class="col-md-12">
            <div class="form-group">
                <textarea name="message" class="form-control" id="message" cols="30"
                    rows="4" placeholder="Create a message here" required></textarea>
            </div>
        </div>
        <div class="col-md-12">
            <div class="row align-items-center">
                <div class="col-auto">
                    <div class="form-group">
                        <button type="submit" class="btn btn-light">Send <i
                                class="fa-solid fa-paper-plane"></i></button>
                    </div>
                </div>
                <div class="col">
                    <p class="small mb-0 mt-0">By clicking this button, you agree to the <a
                            href="" rel="nofollow">terms and
                            conditions</a>.</p>
                </div>
            </div>
        </div>
    </div>
</form>

推荐答案

我必须将表单转换为jQuery对象->$(表格).

这是最后的代码.谢谢大家.

 // Bootstrap forms validation
function submitForm() {
    var forms = document.querySelectorAll('.needs-validation')
    Array.prototype.slice.call(forms).forEach(function (form) {
        form.addEventListener('submit', function (event) {
            if (!form.checkValidity()) {
                form.querySelector(".form-control:invalid").focus();
                event.preventDefault()
                event.stopPropagation()
            }
            else {
                event.preventDefault();
                $.ajax({
                    type: "POST",
                    url: $(form).attr('action'),
                    datatype: "json",
                    data: $(form).serialize(),
                    beforeSend: function () {
                        $(form).find(":submit").html("Sending...").prop('disabled', true);
                    },
                    error: function (xhr, status, error) {
                        $(".toast").addClass('bg-danger');
                        $(".toast-body").text(xhr.status + ': ' + xhr.statusText);
                        $(".toast").toast("show");
                    },
                    success: function (data) {
                        if (data.success === true) {
                            $(form).removeClass('was-validated').trigger("reset");
                            $(".toast").addClass('bg-success');
                        }
                        else {
                            $(".toast").addClass('bg-danger');
                        }
                        $(".toast-body").text(data.message);
                        $(".toast").toast("show");
                    }
                });
            }
            form.classList.add('was-validated')
        }, false)
    });
}

Jquery相关问答推荐

当我使用 OwlCarousel 时,没有任何显示

如何在光滑的轮播上添加进度条

退出 jquery.each 循环后

jQuery中的多个 Select 器链接?

JSLint 错误:将调用移动到包含函数的括号中

何时执行 $(document).ready 回调?

如何使用 jQuery Select 所有复选框?

使用 jQuery click 处理锚点 onClick()

页面滚动后,jQuery可拖动在错误的位置显示助手

Backbone.js 和 jQuery

如何立即启动 setInterval 循环?

禁用表单提交上的提交按钮

使用 jQuery Select 最后 5 个元素

使用 jQuery 按字母顺序对选项元素进行排序

在不丢失光标位置的情况下更新输入值

带有 jQ​​uery 的饼图

判断 JS 对象中是否存在键

如何在 Bootstrap 中创建切换按钮

调整浏览器大小时如何自动居中 jQuery UI 对话框?

jQuery append() 与 appendChild()