如何将按钮替换为加载gif图像当单击提交按钮,然后在成功删除表单上,并替换为成功消息时


How to replace button with loading gif image when the submit button is clicked then on success remove form and replace with a success message

我有一个html表单,并使用以下代码来处理它和验证输入字段。

sendmail.php:

if($_POST) {
    // Enter the email where you want to receive the message
    $emailTo = 'example@gmail.com';
    // 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 <boss@gmail.co.za>' . "'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>');
            }
        }
    });
});

表单运行良好,我收到了电子邮件,我只想在表单中再添加两种行为,当你单击提交按钮时,按钮内必须显示加载gif图像,如果电子邮件发送成功,我想删除表单并替换为成功消息。如果表单不是出于任何原因,我希望表单的say按钮恢复到它的初始状态。我该怎么做?

修改script.js代码,如下所示:

$('.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>');
            }
        }
    });
});

其中div id将是在HTML模板中设置按钮的div元素的id。

据您所知,使用jQuery有很多方法可以实现这一点。以下是一些类似问题的参考链接

使用jquery 将提交按钮更改为加载图像

用加载gif 替换提交按钮

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

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>

如果按钮使用<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。有很多方法可以实际处理显示和隐藏加载图标,但这应该让您开始。

您可以通过这个轻松做到这一点

 $('#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>