如何在表单提交成功后隐藏提交按钮并显示成功提示

本文介绍如何通过前端 javascript 与后端 php 协同配合,在联系表单成功提交后立即隐藏“send”按钮、显示自定义成功消息,避免页面跳转,提升用户体验。

要实现“提交成功后隐藏按钮 + 显示感谢消息”,核心思路是:不依赖页面跳转(header() 重定向),而是通过 AJAX 异步提交表单,并在 JavaScript 中控制 UI 状态。你当前的代码仍采用传统表单提交(

),这会导致整页刷新,无法平滑切换按钮与提示——因此需重构为无刷新提交。

✅ 推荐方案:AJAX + JSON 响应(前后端分离更清晰)

1. 后端 PHP(sendmail.php)返回结构化响应

修改你的 sendmail.php,确保它不执行重定向,而是统一输出 JSON,并在成功/失败时设置对应 HTTP 状态码:

 false, 'message' => 'Method not allowed']);
    exit;
}

// 验证 & 过滤逻辑(保持你原有 test_input 和 $errors 处理)
function test_input($data) {
    return htmlspecialchars(trim(stripslashes($data)));
}

$errors = [];
if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['message'])) {
    $erro

rs[] = "Please fill-in the form correctly"; } elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { $errors[] = "Invalid e-mail address"; } if (!empty($errors)) { http_response_code(400); echo json_encode(['success' => false, 'message' => $errors[0]]); exit; } // 发送邮件 & 写日志(保留你原有逻辑) $name = test_input($_POST['name']); $email = test_input($_POST['email']); $message = test_input($_POST['message']); $to = "contact@example.com"; $subject = "example | You have a new message from " . $name; $body = "Name: $name\nEmail: $email\nMessage:\n$message"; $headers = "From: $email\r\n" . "Reply-To: $email\r\n"; // 记录日志(建议用 file_put_contents,注意权限) $logEntry = "$name == Email: $email == Message: $message" . PHP_EOL; file_put_contents('entries.log', $logEntry, FILE_APPEND | LOCK_EX); // 发送邮件(示例,实际请用 mail() 或 SMTP 库) if (mail($to, $subject, $body, $headers)) { http_response_code(200); echo json_encode(['success' => true, 'message' => 'Thank you for contacting us. We will be in touch with you soon.']); } else { http_response_code(500); echo json_encode(['success' => false, 'message' => 'Failed to send email. Please try again.']); } ?>
⚠️ 注意:mail() 函数在本地开发环境(如 XAMPP/MAMP)可能不可用,请测试或改用 PHPMailer 等可靠库。

2. 前端 HTML + JavaScript(关键交互逻辑)

保持你的 HTML 结构,但移除 onsubmit 冗余属性,添加 ID 便于操作:


  
  
  
  

添加以下 JavaScript(放在