Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"changes": [
{
"comment": "fix: editor element occor error #5003\n\n",
"type": "none",
"packageName": "@visactor/vtable"
}
],
"packageName": "@visactor/vtable",
"email": "892739385@qq.com"
}
19 changes: 18 additions & 1 deletion packages/vtable-editors/src/list-editor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,24 @@ export class ListEditor implements IEditor {
}

onEnd() {
this.container.removeChild(this.element);
// this.container.removeChild(this.element);
// 防御性处理:element 可能尚未创建或已经被移除
if (!this.element) {
return;
}
const element = this.element;
const parentNode = element.parentNode;
if (parentNode) {
try {
parentNode.removeChild(element);
} catch (error) {
// 如果元素已经被移除或移动,忽略 NotFoundError,保持与 InputEditor 一致的容错行为
if (!(error instanceof Error) || error.name !== 'NotFoundError') {
throw error;
}
}
}
this.element = undefined;
}

isEditorElement(target: HTMLElement) {
Expand Down
18 changes: 17 additions & 1 deletion packages/vtable-editors/src/textArea-editor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,23 @@ export class TextAreaEditor implements IEditor {

onEnd() {
// do nothing
this.container.removeChild(this.element);
// this.container.removeChild(this.element);
// 防御性处理:element 可能尚未创建或已经被移除
if (!this.element) {
return;
}
const element = this.element;
const parentNode = element.parentNode;
if (parentNode) {
try {
parentNode.removeChild(element);
} catch (error) {
// 如果元素已经被移除或移动,忽略 NotFoundError,保持与 InputEditor 一致的容错行为
if (!(error instanceof Error) || error.name !== 'NotFoundError') {
throw error;
}
}
}
this.element = undefined;
}

Expand Down
3 changes: 3 additions & 0 deletions packages/vtable/src/edit/edit-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,9 @@ export class EditManager {
this.editingEditor.onEnd?.();
this.editingEditor = null;
}
// 清理缓存的编辑器实例,避免在后续 getEditor 调用中对已结束或未启动的编辑器重复调用 onEnd
Object.values(this.cacheLastSelectedCellEditor).forEach((editor: IEditor) => editor?.onEnd?.());
this.cacheLastSelectedCellEditor = {};
}

release() {
Expand Down
Loading