2016-07-21 8 views
2

私はhtmlフォームを持っており、次のコードを使って入力フィールドを確認します。送信ボタンをクリックしてからフォームを削除し、成功メッセージに置き換えてボタンを置き換える方法は

sendmail.php:

if($_POST) { 

    // Enter the email where you want to receive the message 
    $emailTo = '[email protected]'; 

    // Form fields 
    $clientName = addslashes(trim($_POST['name'])); 
    $clientEmail = addslashes(trim($_POST['email'])); 
    $number = addslashes(trim($_POST['number'])); 
    $message = addslashes(trim($_POST['message'])); 

    // Email Ssubject 
    $subject = 'Query from My Domain'; 

    // Compose message to send 
    $sendMessage = 'Hi' . "\n\n"; 
    $sendMessage .= $message . "\n\n"; 
    $sendMessage .= 'From: ' . $clientName . "\n"; 
    $sendMessage .= 'Email: ' . $clientEmail . "\n"; 
    $sendMessage .= 'Contact number: ' . $number . "\n"; 

    $array = array(); 
    $array['nameMessage'] = ''; 
    $array['emailMessage'] = ''; 
    $array['numberMessage'] = ''; 
    $array['messageMessage'] = ''; 

    if($clientName == '') { 
     $array['nameMessage'] = 'Please enter your full name.'; 
    } 
    if (filter_var($clientEmail, FILTER_VALIDATE_EMAIL) == false) { 
     $array['emailMessage'] = 'Please insert a valid email address.'; 
    } 
    if (!preg_match('/^(\+?)+([0-9]{10,})$/', $number)) { 
     $array['numberMessage'] = 'Please enter a valid contact number.'; 
    } 
    if($message == '') { 
     $array['messageMessage'] = 'Please enter your message.'; 
    } 

    $isValid = empty($array['nameMessage']) && empty($array['emailMessage']) && 
       empty($array['numberMessage']) && empty($array['messageMessage']); 

    if($isValid) { 
     // build headers and send mail 
     // Headers 
     $headers = "From: " . $clientName . ' <' . $clientEmail . '>' . "\r\n"; 
     $headers .= "CC: " . 'My Boss <[email protected]>' . "\r\n"; 

     // Send mail 
     mail($emailTo, $subject, $sendMessage, $headers); 
    } else { 
      //echo the error messages 
      echo json_encode($array); 
    } 

} else { 
     header ('location: index.html#contact'); 
    } 

?> 

scripts.js:フォームは素晴らしい作品と私​​は電子メールを取得

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

    var form = $(this); 
    var nameLabel = form.find('label[for="contact-name"]'); 
    var emailLabel = form.find('label[for="contact-email"]'); 
    var numberLabel = form.find('label[for="contact-number"]'); 
    var messageLabel = form.find('label[for="contact-message"]'); 

    nameLabel.html('Full name'); 
    emailLabel.html('Email'); 
    numberLabel.html('Contact number'); 
    messageLabel.html('Message'); 

    var postdata = form.serialize(); 

    $.ajax({ 
     type: 'POST', 
     url: 'sendmail.php', 
     data: postdata, 
     dataType: 'json', 
     success: function(json) { 
      if(json.nameMessage !== '') { 
       nameLabel.append(' - <span class="red error-label"> ' + json.nameMessage + '</span>'); 
      } 
      if(json.emailMessage !== '') { 
       emailLabel.append(' - <span class="red error-label"> ' + json.emailMessage + '</span>'); 
      } 
      if(json.numberMessage !== '') { 
       numberLabel.append(' - <span class="red error-label"> ' + json.numberMessage + '</span>'); 
      } 
      if(json.messageMessage !== '') { 
       messageLabel.append(' - <span class="red error-label"> ' + json.messageMessage + '</span>'); 
      } 
     } 
    }); 
}); 

、私がやりたいすべては、フォームに2つの動作を追加で送信ボタンをクリックすると、ロード中のGIFイメージがボタンの内側に表示されます。メールが正常に送信された場合は、フォームを削除して成功メッセージに置き換えます。フォームが何らかの理由でない場合は、ボタンを押して初期状態に戻すようにフォームにします。これをやり遂げるにはどうすればいいですか?

答えて

1

下記の通りごscript.jsコードを変更:DIV-idはあなたのボタンをHTMLテンプレートに設定されている内側のdiv要素のidになります

$('.contact-form form').submit(function(e) { 
    e.preventDefault(); 
    $("#div-id").html('<img src="/images/loading.gif" />'); 

    var form = $(this); 
    var nameLabel = form.find('label[for="contact-name"]'); 
    var emailLabel = form.find('label[for="contact-email"]'); 
    var numberLabel = form.find('label[for="contact-number"]'); 
    var messageLabel = form.find('label[for="contact-message"]'); 

    nameLabel.html('Full name'); 
    emailLabel.html('Email'); 
    numberLabel.html('Contact number'); 
    messageLabel.html('Message'); 

    var postdata = form.serialize(); 

    $.ajax({ 
     type: 'POST', 
     url: 'sendmail.php', 
     data: postdata, 
     dataType: 'json', 
     complete: function(){ 
      $("#div-id").html('<input type="submit" name="submit" value="submit">'); 
     }, 
     success: function(json) { 
      if(json.nameMessage !== '') { 
       nameLabel.append(' - <span class="red error-label"> ' + json.nameMessage + '</span>'); 
      } 
      if(json.emailMessage !== '') { 
       emailLabel.append(' - <span class="red error-label"> ' + json.emailMessage + '</span>'); 
      } 
      if(json.numberMessage !== '') { 
       numberLabel.append(' - <span class="red error-label"> ' + json.numberMessage + '</span>'); 
      } 
      if(json.messageMessage !== '') { 
       messageLabel.append(' - <span class="red error-label"> ' + json.messageMessage + '</span>'); 
      } 
     } 
    }); 
}); 

を。

jQueryでこれを達成する方法はたくさんあります。以下は参考文献です。同様の質問

Change submit button to a loading image with jquery

Replace submit button with loading gif

http://www.willmaster.com/library/manage-forms/replacing-submit-button-with-loading-image.php

+0

おかげでこれを行うことができます。しかし、成功すると(電子メールが送信されたときのみ)フォーム全体が消え、「お問い合わせいただきありがとうございます、すぐにお返事します」というメッセージが表示されるように、どうすればよいですか? –

+0

[OK]をクリックすると、 "success"にコードを書く必要があります.json.numberMessageをチェックすると、PHPスクリプトからブール値を送信できます。その後、条件付きで使用してページコンテンツを置き換えることができます。ここで確認してくださいhttps://jsfiddle.net/spu7zaae/あなたのフォームとjsコードは、 – Rupal

+0

のように見えますが、私は電子メールを受け取りますが、フォームは消えず、メッセージは表示されません。しかし、エラーは正常に動作しているようです。 –

1

function LoadData(){ 
 
    $("#loading-image").show(); 
 
    $.ajax({ 
 
      url: yourURL, 
 
      cache: false, 
 
      success: function(html){ 
 
      $("Your div id").append(html); 
 
      }, 
 
      complete: function(){ 
 
      $("#loading-image").hide(); 
 
      } 
 
     }); 
 
}
<div id="loading-image"><img src="give your gif umage path"/></div>

0

あなたはボタンの<button>タグを使用している場合は、その.innerHTMLを設定することができます。

$('.contact-form form').submit(function(e) { 
    // ... 
    button.innerHTML = "<img src='' />"; 

    $.ajax({ 
    // ... 
    button.innerHTML = "Click me"; // reset to original content 
    }); 
}); 

それともCSSとdisplay:block;/display:noneでそれを交換できます。読み込み中のアイコンの表示と非表示を実際に処理できる方法はいくつかありますが、開始する必要があります。

0

のリンクが簡単にボタンが、私はそれを望んでどのように振る舞うんこの

$('#gif_image').show(); 
    $.ajax({ 
      url: uri, 
      success: function(){ 
       $('#message').html('<div id="alertFadeOut">Record has been added!</div>'); // Diplay message with a fadeout 
     $('#alertFadeOut').fadeOut(1000, function() { 
         $('#alertFadeOut').text(''); 
        }); 
    }, 
      complete: function(){ 
      $('#gif_image').hide(); 
      } 
     }); 

    <div id="gif_image"><img src="path/tp/image"></div> 
<div id="message"></div> 
関連する問題