【问题标题】:BootstrapValidator not showing success messageBootstrapValidator 未显示成功消息
【发布时间】:2015-11-24 17:47:29
【问题描述】:

编辑我借用的原始代码笔是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">

这是引导验证器在我的 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。我期待它只显示上面在javascript中所述的#success-message div,但事实并非如此。只需打开 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 很陌生)

【问题讨论】:

    标签: javascript jquery forms twitter-bootstrap bootstrapvalidator


    【解决方案1】:

    添加此提交事件以防止表单在点击时提交

    $('#contact_form').on('submit',function(e){
    e.preventDefault();
    });
    

    或使用函数:

    submitHandler: function(validator, form, submitButton) {}
    

    见:http://codepen.io/anon/pen/MadxaE?editors=001

    【讨论】:

    • 我只是将它附加到我的脚本文件的末尾?或者这会取代什么?还是放在//Do Something 评论中?
    • 这就是现在的样子,但我的行为与最初所说的完全相同。我制作了这个 codepen 以使其更具可读性(仅限 JavaScript)codepen.io/anon/pen/bVyKgX
    • 把它放在on success.form.bv 事件之外
    • 我这样做了,现在表单没有提交。我添加了一个警报,由于某种原因,PREVENT ALERT 触发了两次。我认为问题在于.on('success.form.bv', function(e) { 没有触发。我在假设显示成功消息之前立即添加了一个警报,但它永远不会触发。 codepen.io/drpcken/pen/OyYwLV?editors=001
    • 完美!谢谢!!我真的需要更多地研究 jquery 才能理解为什么它不起作用。就像我不知道 .on('success.form.bv) 试图选择和使用什么一样。不管它现在是否有效。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2016-11-03
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多