你好,我只想在提交完成承诺时才进入div
function submitForm(form) {
console.log("submitForm: ", form);
return Promise.resolve(() => form.submit());
}
async function submitFm (form) {
console.log("submitFm: ", form);
await submitForm(form);
};
submitButton.addEventListener("click", () => {
submitFm(form).then(() => {
console.log("should display after submit is done!");
});
});承诺会像这样工作,有人知道缺了什么吗?提前感谢
发布于 2022-07-19 16:07:27
如果根据表单操作提交表单,则需要将状态传递到下一页。更简单的方法是在URL中使用锚,带有hashtag的URL将滚动到id是hashtag的元素。
例如:
<form action="/post/data#id" method="post"></form>如果基于ajax或fetch提交,则在提交时重定向URL,还可以使用hashtag。或者您可以通过Storage持久性数据,并控制下一页上的滚动操作。
如果您使用SPA框架,如Vue、React或其他。您可以使用路由器API来处理提交时的URL更改。或在表单提交成功时直接处理滚动。
发布于 2022-07-19 15:34:30
表单上的submit()方法触发表单提交(以及对结果的导航)。
一旦触发,submit()函数就会完成。
那么承诺就会解决。
然后执行then函数。
然后浏览器导航到新页面。
在网页中运行JavaScript不可能直接导致JavaScript在视图导航到的下一页中运行。
卸载当前页面将杀死在其中运行的任何JavaScript。下一页,无论是在链接的另一端,还是表单提交,还是对location.reload()的调用等等,都是一个空白页。页面中的任何JS都是从零开始运行的。
如果您想要在其中产生某种效果,则需要通过将消息传递到页面加载之间将持久的消息来实现。
示例包括URL或会话存储API上的查询字符串。
然后,您需要在下一页中使用JavaScript来检查该消息,对其进行操作,并可能清除它,这样它就不会影响下一个页面的加载。
https://stackoverflow.com/questions/73039668
复制相似问题