0

メールを送信する機能があります。ここにあります。最後にわかるように、すべてのチェックが正しければ、「Email sent!」というメッセージが表示されます。ユーザーがいくつかの入力をコンパイルしないと、エラーが発生します。

if(isset($_POST['submit']))
{

    $name = $_POST['name'];
    $visitor_email = $_POST['email'];
    ... BLAHBLAH
    // Validation
    if(empty($name)||empty($visitor_email))
    {
        $errors .= "\n Field is mandatory. ";
    }
    if(IsInjected($visitor_email))
    {
        $errors .= "\n Email format is wrong!";
    }


    if(empty($errors))
    {
        // send the email
        $to = $your_email;
        $subject="My subject";
        ... BLAH BLAH

        $headers = "From: $from \r\n";

        mail($to, $subject, $body,$headers);

        echo 'Email sent';
    }
}

メール送信は問題なく動作します。問題は、このフォームが jQuery トグル div 内にあることです。また、メッセージを表示する必要がある場合 (フィールドが必須である、または電子メールが送信されたというエラー メッセージであるかどうかに関係なく)、ユーザーはページの上部とトグルされた div (フォームが含まれているもの) にリダイレクトされます。 ) visibility:hidden に戻ります。ユーザーがページの先頭に移動せずにメッセージを印刷するにはどうすればよいですか?

使用する必要があるjQuery.ajax()ようですが、方法がわかりません..

4

2 に答える 2

0

これを試して:

$('#form').submit(function(e){
    e.preventDefault();

    //ajax code that send to server side here
})
于 2013-10-06T23:52:51.620 に答える
0

jQuery コードを確認する必要があります。ただし、フォームを表示する同じページにフォームを送信し、送信が非同期で処理されない場合、ページがリロードされている可能性があり、ページが一番上に「ジャンプ」しているように見えます。POST 経由でフォームの送信を処理する Ajax メソッドを作成します。event.preventDefault(); を使用できます。フォームが送信されたときにページが「ジャンプ」するのを防ぎます。

OPの返信に基づいて更新:

  1. が表示するコードを一時的に削除し、連絡先フォームを非表示にします。

  2. jQuery 検証プラグインを実装します: http://bassistance.de/jquery-plugins/jquery-plugin-validationをフォーム ハンドラーとして:
    A. このプラグインへの呼び出しを送信ボタンのクリック イベントにバインドします。
    B. event.preventDefault(); を使用します。フォームの送信を停止します。
    C. 成功すると、検証プラグインは Ajax メソッドを呼び出してフォームを投稿します。

  3. フォームを投稿するための Ajax メソッドを作成します。このメソッドには 2 つのコールバックが必要です。
    .done() -- フォームの投稿が成功した
    場合に実行されます。

    done メソッドでは、フォームを非表示にすることができます。あなたのfailメソッドはエラーを表示できます。

于 2013-10-06T23:55:14.940 に答える