表单操作不会在提交时重定向

问题描述 投票:0回答:1

我有一个有趣的情况,因为我正在制作一个直接输出到Google表格的HTML表格(更多信息在这里:https://github.com/jamiewilson/form-to-google-sheets)。但是,我的表单操作不会重定向,因为单击提交按钮时页面将保持不变。 Google表格会记录输入,但不会在网页上显示。我想重定向到一个完全不同的页面。

我注意到这是一个常见问题,但所有其他答案要么a)重定向并且不提交用户的回复,要么b)提交响应但没有重定向。

提前致谢。

  const scriptURL = 'https://script.google.com/macros/s/AKfycbyoQPDaaR1YTUFjkU7weJ_Y9uCTE7hoOK_5yUQVjE8EjVuEIRBh/exec'
  const form = document.forms['submit-to-google-sheet']

  form.addEventListener('submit', e => {
    e.preventDefault()
    fetch(scriptURL, { method: 'POST', body: new FormData(form)})
      .then(response => console.log('Success!', response))
      .catch(error => console.error('Error!', error.message))
  })
<!doctype html>
<html>
	<head></head>
<body>

<form name="submit-to-google-sheet" action="https://www.google.com">
  <input name="email" type="text" placeholder="insert text">
  <input id="submit" name="submit" type="submit" value="Submit">
</form>

	</body>
</html>
html forms submit action
1个回答
0
投票

例如,这个修改怎么样?如果事件可以取消,preventDefault()用于取消事件。在您的情况下,我想提出两种模式。

简单图案:

作为一个简单的修改,如何删除e.preventDefault()

From:

form.addEventListener('submit', e => {
  e.preventDefault()
  fetch(scriptURL, { method: 'POST', body: new FormData(form)})
    .then(response => console.log('Success!', response))
    .catch(error => console.error('Error!', error.message))
})

To:

form.addEventListener('submit', e => {
  fetch(scriptURL, { method: 'POST', body: new FormData(form)})
    .then(response => console.log('Success!', response))
    .catch(error => console.error('Error!', error.message));
})

其他模式:

作为其他模式,如果您只想在fetch()没有返回错误时重定向,那么下面的修改怎么样?在这种情况下,不使用action="https://www.google.com"<form name="submit-to-google-sheet" action="https://www.google.com">

Sample script:

form.addEventListener('submit', e => {
  e.preventDefault();
  fetch(scriptURL, {method: 'POST', body: new FormData(form)})
    .then(response => {
      console.log('Success!', response);
      window.location.href = "https://www.google.com";
    })
    .catch(error => console.error('Error!', error.message));
});

参考:

如果这些不是你想要的结果,我道歉。

© www.soinside.com 2019 - 2024. All rights reserved.