表单提交后怎么防止用户重复点击提交按钮?
我做了一个用户注册的表单,提交时用的是 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;
}
});
但不确定这种做法有没有坑,比如页面刷新或者用户中途关闭会不会导致状态卡死?有没有更稳妥的方案?
暂无解答