登录
首页 >  文章 >  php教程

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

时间:2026-02-06 13:00:18 480浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《如何在表单提交成功后隐藏提交按钮并显示成功提示 》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

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

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

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

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

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

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

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

<?php
header('Content-Type: application/json; charset=utf-8');

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['success' => 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'])) {
    $errors[] = "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 便于操作:

<form id="contactForm">
  &lt;input type=&quot;text&quot; name=&quot;name&quot; placeholder=&quot;Name&quot; required&gt;
  &lt;input type=&quot;email&quot; name=&quot;email&quot; placeholder=&quot;E-mail&quot; required&gt;
  &lt;textarea name=&quot;message&quot; placeholder=&quot;Type Your Message&quot; rows=&quot;4&quot; required&gt;&lt;/textarea&gt;
  <button type="submit" id="submitBtn">Send</button>
</form>
<p id="thank-you-message" style="display:none; color:#28a745; font-weight:bold;"></p>

添加以下 JavaScript(放在 前或使用 DOMContentLoaded):

<script>
document.getElementById('contactForm').addEventListener('submit', async function(e) {
  e.preventDefault(); // 阻止默认提交

  const submitBtn = document.getElementById('submitBtn');
  const successMsg = document.getElementById('thank-you-message');
  const formData = new FormData(this);

  // 1. 禁用按钮 + 显示加载态(可选)
  submitBtn.disabled = true;
  submitBtn.textContent = 'Sending...';

  try {
    const res = await fetch('/sendmail.php', {
      method: 'POST',
      body: formData
    });

    const data = await res.json();

    if (res.ok && data.success) {
      // 2. 隐藏按钮,显示成功消息
      submitBtn.style.display = 'none';
      successMsg.textContent = data.message;
      successMsg.style.display = 'block';
    } else {
      alert('Error: ' + (data.message || 'Unknown error'));
      submitBtn.disabled = false;
      submitBtn.textContent = 'Send';
    }
  } catch (err) {
    console.error('Network error:', err);
    alert('Network error. Please check your connection.');
    submitBtn.disabled = false;
    submitBtn.textContent = 'Send';
  }
});
</script>

3. 可选增强:CSS 平滑过渡(提升体验)

#thank-you-message {
  opacity: 0;
  transform: translateY(10px);
  transition: all 0.3s ease;
}
#thank-you-message.show {
  opacity: 1;
  transform: translateY(0);
}

并在 JS 中替换 successMsg.style.display = 'block' 为:

successMsg.classList.add('show');

❌ 不推荐方案说明(如原答案所提 Cookie/Session 控制显示)

虽然用 PHP 判断 $_SESSION['submitted'] 后隐藏表单可行,但它存在明显缺陷:

  • 用户刷新页面后,成功状态丢失(除非持久化且未清理 session);
  • 无法实时反馈提交结果(仍需跳转或重载);
  • 不支持多标签页并发提交;
  • 与现代 Web 交互范式脱节。

因此,AJAX 方案是更健壮、可维护、用户体验更优的选择

✅ 总结

步骤关键点
后端返回 JSON,禁用 header() 跳转,统一错误/成功响应格式
前端e.preventDefault() + fetch() 提交 + 按钮状态控制 + 消息显隐
安全服务端始终校验(不能只信前端);输入过滤(你已做 test_input)
健壮性添加网络异常捕获、按钮防重复点击、用户友好提示

按此实现,即可在不跳转的前提下,优雅完成「提交 → 隐藏按钮 → 显示感谢语」全流程。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于文章的相关知识,也可关注golang学习网公众号。

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>