本文详解如何正确阻止 html 表单默认提交行为,解决页面跳顶、重复提交及事件绑定失效等问题,并提供基于 emailjs 的完整可运行示例与关键注意事项。
本文详解如何正确阻止 html 表单默认提交行为,解决页面跳顶、重复提交及事件绑定失效等问题,并提供基于 emailjs 的完整可运行示例与关键注意事项。
在 Web 开发中,表单提交后页面自动刷新并滚动至顶部,是因浏览器执行了
const feedbackForm = document.getElementById('feedback-form');
const feedbackMessage = document.getElementById('feedback-message');
if (feedbackForm && feedbackMessage) {
const sendEmail = (e) => {
e.preventDefault(); // ✅ 关键:必须在此处调用,且在表单 submit 事件中
// ✅ 将 EmailJS 调用移入函数体内
emailjs
.sendForm('service_mbynjbg', 'template_xm8yzfd', '#feedback-form', 'SroPTASblucuUzgXt')
.then(() => {
feedbackMessage.textContent = 'Message sent successfully :D';
feedbackForm.reset();
setTimeout(() => {
feedbackMessage.textContent = '';
}, 5000);
})
.catch((error) => {
console.error('EmailJS error:', error);
feedbackMessage.textContent = 'Message not sent (service error)';
});
};
// ✅ 绑定到 form 元素,而非 button
feedbackForm.addEventListener('submit', sendEmail);
}⚠️ 额外注意事项(避坑指南)
HTML 中 action="" 不影响 preventDefault,但建议显式设为 action="#" 或留空(你当前写法合法);
:你第二处
确保 EmailJS SDK 已正确引入(在

















