You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Axios原生JS提交Formspree表单时实现beforeSend功能?

实现原生JS版的Formspree表单提交(包含beforeSend状态提示)

嘿,其实你要实现的beforeSend功能在原生JS里超级直接——不需要像jQuery那样依赖特定的钩子函数,只需要在发起axios请求之前,直接修改提交按钮的状态和文本就可以啦!

原jQuery代码里的beforeSend就是在请求发送前执行的逻辑,我们把这部分逻辑直接移到axios调用的前面就行,然后再在请求成功/失败的回调里恢复按钮的初始状态,和你原来的jQuery逻辑完全对齐。

下面是修改后的完整原生JS代码:

const form = document.querySelector('form');
form.addEventListener("submit", function(e){
  e.preventDefault();
  const submitBtn = form.querySelector('.contact__submit');
  const defaultSubmitText = submitBtn.innerHTML;

  // 这里就是对应jQuery的beforeSend逻辑
  submitBtn.disabled = true;
  submitBtn.innerHTML = 'Sending message…';

  axios({
    method: 'post',
    url: 'https://formspree.io/your@email.com',
    data: serialize(form) // 用你提到的序列化函数
  })
  .then(function(response) {
    console.log('SENT!!', response.data);
    submitBtn.innerHTML = 'Message sent!';
    // 5秒后恢复按钮初始状态
    setTimeout(function() {
      submitBtn.disabled = false;
      submitBtn.innerHTML = defaultSubmitText;
    }, 5000);
  })
  .catch(function(){
    console.log('ERROR!!');
    submitBtn.innerHTML = 'Oops, there was an error.';
    // 同样5秒后恢复
    setTimeout(function() {
      submitBtn.disabled = false;
      submitBtn.innerHTML = defaultSubmitText;
    }, 5000);
  });
});

关键逻辑说明:

  • 请求发送前:直接设置按钮的disabled属性为true,同时把按钮文本改成提示发送中的内容,这完全对应jQuery的beforeSend回调
  • 请求成功后:更新按钮文本为成功提示,然后用setTimeout在5秒后恢复按钮的可点击状态和初始文本
  • 请求失败后:同理,更新为错误提示,再恢复初始状态

这样就完美复刻了你原来jQuery代码里的所有交互逻辑,而且完全用原生JS(结合axios)实现,没有页面跳转哦!

内容的提问来源于stack exchange,提问作者Marine Le Borgne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:58:07