0

編集:私がこれを借りた元の codepen はhereです。唯一の違いは、HTMLaction=' 'action='mail-form.php'. これがJavaScriptが機能しない理由ですか?

PHPフォームの検証にbootstrapvalidatorを使用しています。うまく機能しますが、フォームを送信すると、成功通知を表示する代わりに、フォームの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');
        });
});

検証が成功した後にフォームを送信すると、フォームのactionwhich is に移動しmail-form.phpます。#success-message上記のようにjavascriptで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を初めて使用します)

4

1 に答える 1