表单提交后怎么防止用户重复点击提交按钮?

上官东景 阅读 4

我做了一个用户注册的表单,提交时用的是 fetch 发请求。但发现如果用户手快连点几次“注册”按钮,就会发好几次请求,后端收到了重复数据。我已经试过在点击后给按钮加 disabled,但有时候网络慢,按钮还没变灰就又点了一次,还是防不住。

现在想找个靠谱的办法彻底阻止重复提交,是不是得结合 loading 状态或者加个提交锁?比如这样:

let isSubmitting = false;

form.addEventListener('submit', async (e) => {
  e.preventDefault();
  if (isSubmitting) return;
  isSubmitting = true;
  try {
    await fetch('/register', { method: 'POST', body: new FormData(form) });
  } finally {
    isSubmitting = false;
  }
});

但不确定这种做法有没有坑,比如页面刷新或者用户中途关闭会不会导致状态卡死?有没有更稳妥的方案?

我来解答 赞 0 收藏
二维码
手机扫码查看
暂无解答

暂无解答