javascript - 每次加载 DOM 内容时阻止 JS 函数运行?
问题描述
我遇到了一个问题,我只想load_mailbox('inbox')
在第一次加载页面时运行,但是当提交表单时,我想用其他参数('sent')加载邮箱,如下面的代码所示。但我认为正在发生的事情是,由于load_mailbox('inbox')
它位于 DOMContentLoaded 事件侦听器中,即使在load_mailbox('sent')
完成加载时它也在运行,任何人都可以想出一种方法来阻止它这样做,或者解决这个问题的另一种方法吗?
代码:
document.addEventListener('DOMContentLoaded', function() {
// By default, load the inbox
load_mailbox('inbox');
document.querySelector('#compose-form').onsubmit = function() {
//Declaring email variables
const recipients = document.querySelector('#compose-recipients').value
const subject = document.querySelector('#compose-subject').value
const body = document.querySelector('#compose-body').value
//Making API request
fetch('/emails', {
method: 'POST',
body: JSON.stringify({
recipients: recipients,
subject: subject,
body: body
})
})
.then(response => response.json())
.then(result => {
console.log(result);
load_mailbox('sent');
});
}
});
解决方案
正如@PatrickEvans 所说,问题在于表单正在执行其默认操作,即重新加载 url,因此通过 return false 阻止它这样做;在提交回调函数结束时修复它!
现在事件监听器及其回调看起来像这样:
document.querySelector('#compose-form').onsubmit = function() {
//Declaring email variables
const recipients = document.querySelector('#compose-recipients').value
const subject = document.querySelector('#compose-subject').value
const body = document.querySelector('#compose-body').value
//Making API request
fetch('/emails', {
method: 'POST',
body: JSON.stringify({
recipients: recipients,
subject: subject,
body: body
})
})
.then(response => response.json())
.then(result => {
console.log(result);
load_mailbox('sent');
});
return false;
}
推荐阅读
- nuget - 为什么 MSTest.TestAdapter 将其 DLL 添加到我的 NuGet 包中?
- typescript - Apollo GraphQL 服务器 + TypeScript
- python - 即使 AssertionError 也导出 pytest 结果
- c++ - 如何获取崩溃的 DLL 的堆栈跟踪?
- mysql - 在同一个表中通过子查询删除教义
- amazon-web-services - 如何在不导致内部读取完整数据的情况下扫描 DynamoDB 主键?
- node.js - 我正在尝试将我的电子应用程序变成 Windows 便携版
- vue.js - 插槽、模式和 $emit 动作 - Vue.js 2
- java - 如何使用注解参数优先级创新方法
- r - 如何使用 R 将数据帧转换为 JSON 数组