fix(static): 修复dnfs导航栈污染与返回键栈空越界
- 点卡片/返回上一层前先经 confirmLeaveIfDirty 守卫确认,用户选择 不放弃输入时不再执行 push/pop,stack 保持原样 - 返回键目标 id 判断由 length>=0(恒真,空栈取到 undefined)改为 length>0,空栈正确回根节点 0
This commit is contained in:
1 parent
16b059253b
commit
5a3dff9026
1 file changed
+16
-1
@@ -772,6 +772,18 @@ function cancelEdit() {
|
|||||||
resetTextareaHeight(); /* 恢复初始高度 */
|
resetTextareaHeight(); /* 恢复初始高度 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 导航守卫:表单有未提交内容时先 confirm;确认放弃则清空表单放行,否则本次导航不执行。
|
||||||
|
* 必须在调用方修改 stack 之前调用(点卡片 push 前 / 返回上一层 pop 前),
|
||||||
|
* 否则用户选择"不放弃"时 stack 已被改动,后续导航与新增节点的 pid 全部错位 */
|
||||||
|
function confirmLeaveIfDirty() {
|
||||||
|
if (input_note_title.value == "" && input_note_content.value == "") return true;
|
||||||
|
if (confirm("是否放弃当前输入的内容?") == false) return false;
|
||||||
|
input_note_title.value = "";
|
||||||
|
input_note_content.value = "";
|
||||||
|
cancelEdit();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
function load_notes(main_node) {
|
function load_notes(main_node) {
|
||||||
|
|
||||||
/* 这个不能设置为空的 */
|
/* 这个不能设置为空的 */
|
||||||
@@ -802,6 +814,7 @@ function load_notes(main_node) {
|
|||||||
let card = document.createElement('div');
|
let card = document.createElement('div');
|
||||||
card.className = "card";
|
card.className = "card";
|
||||||
card.addEventListener('click', function(event) {
|
card.addEventListener('click', function(event) {
|
||||||
|
if (!confirmLeaveIfDirty()) return; /* 未放弃输入则不跳转,stack 保持原样 */
|
||||||
var id = Number(item.id)
|
var id = Number(item.id)
|
||||||
stack.push(id)
|
stack.push(id)
|
||||||
getNode(id).then(load_notes)
|
getNode(id).then(load_notes)
|
||||||
@@ -904,8 +917,10 @@ function loadMap(children_json) {
|
|||||||
back.className = "tag back";
|
back.className = "tag back";
|
||||||
back.textContent = "← 返回上一层";
|
back.textContent = "← 返回上一层";
|
||||||
back.addEventListener("click", () => {
|
back.addEventListener("click", () => {
|
||||||
|
if (!confirmLeaveIfDirty()) return; /* 未放弃输入则不返回,stack 保持原样 */
|
||||||
stack.pop();
|
stack.pop();
|
||||||
var id = (stack.length >= 0) ? stack[stack.length - 1] : 0;
|
/* 栈空(回到根)时取 0:原判断 stack.length >= 0 恒真,空栈取 stack[-1] 得 undefined */
|
||||||
|
var id = (stack.length > 0) ? stack[stack.length - 1] : 0;
|
||||||
getNode(id).then(load_notes);
|
getNode(id).then(load_notes);
|
||||||
getNode(id).then(loadMap);
|
getNode(id).then(loadMap);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in new issue
Block a user