javascript - 尝试单击隐藏然后再次可见的元素时出错
问题描述
当我单击一个按钮时,我使用 axios 将一些数据发送到我的 node.js 后端,当单击该按钮时,我将其隐藏并显示一个微调器。如果出现问题,我会隐藏微调器并再次显示按钮。这很好用。但是,如果我在按钮再次可见后单击它,我会收到一条错误消息:
未捕获的类型错误:无法在 HTMLAnchorElement.document.querySelector.addEventListener.e 的 renderLoader (26786sdg72635287hd) 处读取 null 的属性“insertAdjacentHTML”
HTML:
<div class="spinner"></div>
JAVASCRIPT
const renderLoader = parent => {
const loader = `
<div class="loader">
<svg>
<use href="/images/icons.svg#icon-cw"></use>
</svg>
</div>
`;
parent.insertAdjacentHTML('afterbegin', loader);
};
const clearLoader = () => {
const loader = document.querySelector('.spinner');
if (loader) {
loader.parentElement.removeChild(loader);
}
};
document.querySelector('.approve').addEventListener('click', e => {
e.preventDefault();
const csrf = document.querySelector('[name=_csrf]').value;
const productId = document.querySelector('[name=productId]').value;
document.querySelector('.approve').style.visibility = 'hidden';
document.querySelector('.reject').style.visibility = 'hidden';
renderLoader(document.querySelector('.spinner'));
axios.post('/account/approve/' + productId, {
status: 'approved'
},
{
headers: {
'csrf-token': csrf
}
})
.then(response => {
const approveBox = document.querySelector('.dashboard-list-box');
const successMessage = document.querySelector('.success');
approveBox.classList.add('fade-out');
successMessage.classList.add('notification');
successMessage.innerHTML = response.data.message;
clearLoader();
})
.catch(err => {
clearLoader();
document.querySelector('.approve').style.visibility = 'visible';
document.querySelector('.reject').style.visibility = 'visible';
});
});
解决方案
如果出现错误,clearLoader
调用它会删除.spinner
元素,我认为它不应该,要解决这个问题,只需更改此行:
const loader = document.querySelector('.spinner');
至
const loader = document.querySelector('.loader');
从clearLoader
函数内部。考虑到变量的名称,这似乎是您的意图。
推荐阅读
- python - QT for Python 中是否有 QSlider 的所有 QSS 属性列表?
- cmake - 无法在 Clion 中构建 FreeRTOS WIN32 演示
- laravel - 我收到错误 Class 'Tymon\JWTAuth\Providers\JWTAuthServiceProvider' not found
- java - Spring-boot中的嵌套JSON对象反序列化
- javascript - nodeJS 将 Buffer 转换为 fs.ReadStream 对象
- stream - 自定义处理 Akka Streams Flow 中的未来故障
- c++ - c++如何释放内存
- excel - SSIS 包,用于将多个 Excel 工作表导入带有工作表名称的 DB 表
- vim - 在vim中插入模式函数/缩写/片段
- arrays - 生成 CSV 配对一个字段和多个数组元素