BootstrapValidator 未显示成功消息
BootstrapValidator not showing success message
编辑: 我借用的原始codepen是here。唯一的区别是 HTML 我将 action=' '
(它是空白的,所有 php 代码都在与表单相同的文件中)更改为 action='mail-form.php'
。这就是 javascript 不起作用的原因吗?
我正在使用 bootstrapvalidator 验证我的 php 表单。它工作得很好,但是当我提交表单时,它没有显示我的成功通知,而是转到表单的 action
页面。表格有效,电子邮件已发送。
这是我的表单声明:
<form class="well form-horizontal" action="mail-form.php" method="post" id="contact_form">
这是 bootstrap 验证器在我的 javascript 中提交表单的调用:
$(document).ready(function() {
$('#contact_form').bootstrapValidator({
// To use feedback icons, ensure that you use Bootstrap v3.1.0 or later
feedbackIcons: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
// Removed validation rules for brevity //
.on('success.form.bv', function(e) {
$('#success_message').slideDown({ opacity: "show" }, "slow") // Do something ...
$('#contact_form').data('bootstrapValidator').resetForm();
// Prevent form submission
e.preventDefault();
// Get the form instance
var $form = $(e.target);
// Get the BootstrapValidator instance
var bv = $form.data('bootstrapValidator');
// Use Ajax to submit form data
$.post($form.attr('action'), $form.serialize(), function(result) {
console.log(result);
}, 'json');
});
});
当我在验证成功后提交表单时,它会将我定向到表单的 action
,即 mail-form.php
。我期待它只显示 #success-message
div,如上文所述 javascript,但它没有。只需打开 mail-form.php
,这是一个空白页面,其中回显了提交的字段值(用于我的调试)。
如果有帮助,我将在这里添加我的脚本文件到我的页面页脚中。
...
</footer>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<?php if (basename($_SERVER['PHP_SELF']) == "contact.php") { ?>
<script src="https://www.google.com/recaptcha/api.js"></script>
<?php } ?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-validator/0.4.5/js/bootstrapvalidator.min.js"></script>
<script src="js/scripts.js"></script>
</body>
我总是被告知任何脚本声明都需要放在文件的末尾,以便在页面完全加载之前加载它们。我不知道这是否是我遇到问题的原因(我是 jquery 的新手)
添加此提交事件以防止表单在点击时提交
$('#contact_form').on('submit',function(e){
e.preventDefault();
});
或使用函数:
submitHandler: function(validator, form, submitButton) {}
编辑: 我借用的原始codepen是here。唯一的区别是 HTML 我将 action=' '
(它是空白的,所有 php 代码都在与表单相同的文件中)更改为 action='mail-form.php'
。这就是 javascript 不起作用的原因吗?
我正在使用 bootstrapvalidator 验证我的 php 表单。它工作得很好,但是当我提交表单时,它没有显示我的成功通知,而是转到表单的 action
页面。表格有效,电子邮件已发送。
这是我的表单声明:
<form class="well form-horizontal" action="mail-form.php" method="post" id="contact_form">
这是 bootstrap 验证器在我的 javascript 中提交表单的调用:
$(document).ready(function() {
$('#contact_form').bootstrapValidator({
// To use feedback icons, ensure that you use Bootstrap v3.1.0 or later
feedbackIcons: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
// Removed validation rules for brevity //
.on('success.form.bv', function(e) {
$('#success_message').slideDown({ opacity: "show" }, "slow") // Do something ...
$('#contact_form').data('bootstrapValidator').resetForm();
// Prevent form submission
e.preventDefault();
// Get the form instance
var $form = $(e.target);
// Get the BootstrapValidator instance
var bv = $form.data('bootstrapValidator');
// Use Ajax to submit form data
$.post($form.attr('action'), $form.serialize(), function(result) {
console.log(result);
}, 'json');
});
});
当我在验证成功后提交表单时,它会将我定向到表单的 action
,即 mail-form.php
。我期待它只显示 #success-message
div,如上文所述 javascript,但它没有。只需打开 mail-form.php
,这是一个空白页面,其中回显了提交的字段值(用于我的调试)。
如果有帮助,我将在这里添加我的脚本文件到我的页面页脚中。
...
</footer>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<?php if (basename($_SERVER['PHP_SELF']) == "contact.php") { ?>
<script src="https://www.google.com/recaptcha/api.js"></script>
<?php } ?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-validator/0.4.5/js/bootstrapvalidator.min.js"></script>
<script src="js/scripts.js"></script>
</body>
我总是被告知任何脚本声明都需要放在文件的末尾,以便在页面完全加载之前加载它们。我不知道这是否是我遇到问题的原因(我是 jquery 的新手)
添加此提交事件以防止表单在点击时提交
$('#contact_form').on('submit',function(e){
e.preventDefault();
});
或使用函数:
submitHandler: function(validator, form, submitButton) {}