我有一个有趣的情况,因为我正在制作一个直接输出到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>
例如,这个修改怎么样?如果事件可以取消,preventDefault()
用于取消事件。在您的情况下,我想提出两种模式。
作为一个简单的修改,如何删除e.preventDefault()
?
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))
})
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">
。
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));
});
如果这些不是你想要的结果,我道歉。