
本文讲解如何在 SweetAlert 弹窗确认提交成功后,不刷新页面即可隐藏目标 元素,并指出原代码中 location.reload() 带来的副作用及 localStorage 操作的语法错误,提供健壮、可维护的替代方案。
本文讲解如何在 sweetalert 弹窗确认提交成功后,**不刷新页面**即可隐藏目标 `
在使用 SweetAlert 处理表单提交时,开发者常误用 location.reload() 来“刷新状态”,但该操作不仅造成用户体验中断(白屏、滚动重置、表单焦点丢失),还会使前端状态完全丢失——包括你希望“隐藏某个 div”的意图无法持久化(因为重载后 DOM 重建,隐藏逻辑未执行)。更优解是:在 AJAX 成功回调中直接操作 DOM,实现无刷新、响应式的界面更新。
✅ 正确做法:用 .hide() 或 .remove() 替代 location.reload()
原代码中:
location.reload();
localStorage.removeItem('leftcontent');
localStorage.getItem('rightcontent', data); // ❌ 语法错误:getItem 只接受 1 个参数应替换为:
$("#content1").hide(); // 隐藏元素(保留 DOM 结构,可后续 show() 恢复)
// 或
// $("#content1").remove(); // 彻底移除元素(不可逆)
localStorage.removeItem('leftcontent');
// 若需保存右侧内容到 localStorage,正确写法:
localStorage.setItem('rightcontent', JSON.stringify(data)); // 注意:setItem 才是存储方法✅ 完整优化后的代码示例
$(document).ready(function() {
$(document).on('click', '#approve', function() {
Swal.fire({
title: 'Are you sure?',
icon: 'warning',
showCancelButton: true,
confirmButtonText: 'Yes',
cancelButtonText: 'Cancel'
}).then((result) => {
if (result.isConfirmed) { // 推荐使用 isConfirmed 替代已弃用的 result.value
$('.leftForms').each(function() {
const $form = $(this);
const valuesToSend = $form.serialize();
$.ajax({
url: 'data.php', // ⚠️ 注意:原代码中 url 和 data.php 冲突,此处以 url 为准
type: 'POST',
method: $form.attr('method') || 'POST',
data: valuesToSend
})
.done(function(response) {
// 假设 response 是 JSON 格式,且含 message 字段
Swal.fire({
title: 'Data berhasil diupdate!',
text: response.message || 'Update completed.',
icon: 'success',
timer: 1500,
showConfirmButton: false
}).then(() => {
// ✅ 关键:无刷新隐藏目标元素
$("#content1").hide();
// ✅ 正确管理 localStorage
localStorage.removeItem('leftcontent');
if (response.rightContent) {
localStorage.setItem('rightcontent', JSON.stringify(response.rightContent));
}
});
})
.fail(function(xhr, status, error) {
Swal.fire('Error', 'Failed to update data: ' + error, 'error');
});
});
}
});
});
});⚠️ 注意事项与最佳实践
- 避免 location.reload() 的滥用:它会丢弃所有 JS 内存状态、清空表单临时数据、打断用户操作流;仅当服务端强制要求全量状态同步时才考虑(此时应配合服务端渲染或 SSR)。
- localStorage.getItem(key, data) 是无效语法:getItem() 仅接收一个参数(key),第二个参数会被忽略;如需读取并解析,请使用 JSON.parse(localStorage.getItem('key'))。
-
.hide() vs .remove():
- 用 .hide() 适合“暂时隐藏,后续可能显示”(例如切换 Tab、条件展示);
- 用 .remove() 适合“永久移除,无需恢复”(如删除列表项)。
- 增强健壮性:添加 .fail() 回调处理请求失败;使用 Swal.fire(...).then(() => {...}) 确保隐藏逻辑在弹窗关闭后执行;对 response 做空值校验,防止运行时错误。
通过以上重构,你不仅能精准控制 #content1 的显隐状态,还能提升应用性能、可维护性与用户体验——这才是现代前端交互的正确打开方式。










