Skip to content

Commit b5e10a9

Browse files
committed
🐛 修复mac下中文输入法输入英文并Enter时直接退出编辑状态
1 parent d92ddc3 commit b5e10a9

File tree

2 files changed

+36
-13
lines changed

2 files changed

+36
-13
lines changed

app/src/core/render/domElement/inputElement.tsx

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,17 @@ export namespace InputElement {
9090
document.body.removeEventListener("mousedown", onOutsideClick);
9191
removeElement();
9292
});
93+
let isComposing = false;
94+
inputElement.addEventListener("compositionstart", () => {
95+
isComposing = true;
96+
});
97+
inputElement.addEventListener("compositionend", () => {
98+
isComposing = false;
99+
});
100+
93101
inputElement.addEventListener("keydown", (event) => {
94102
event.stopPropagation();
95-
if (event.key === "Enter") {
103+
if (event.key === "Enter" && !isComposing) {
96104
resolve(inputElement.value);
97105
onChange(inputElement.value);
98106
document.body.removeEventListener("mousedown", onOutsideClick);
@@ -197,7 +205,19 @@ export namespace InputElement {
197205
document.body.removeEventListener("mousedown", onOutsideClick);
198206
removeElement();
199207
});
208+
let isComposing = false;
209+
textareaElement.addEventListener("compositionstart", () => {
210+
isComposing = true;
211+
});
212+
textareaElement.addEventListener("compositionend", () => {
213+
// 防止此事件早于enter键按下触发(Mac的bug)
214+
setTimeout(() => {
215+
isComposing = false;
216+
}, 100);
217+
});
218+
200219
textareaElement.addEventListener("keydown", (event) => {
220+
console.log(event.key, "keydown");
201221
event.stopPropagation();
202222
if (event.key === "Tab") {
203223
// 防止tab切换到其他按钮
@@ -238,17 +258,20 @@ export namespace InputElement {
238258

239259
if (event.key === "Enter") {
240260
event.preventDefault();
241-
const enterKeyDetail = getEnterKey(event);
242-
if (textNodeExitEditMode === enterKeyDetail) {
243-
// 用户想退出编辑
244-
exitEditMode();
245-
addSuccessEffect();
246-
} else if (textNodeContentLineBreak === enterKeyDetail) {
247-
// 用户想换行
248-
breakLine();
249-
} else {
250-
// 用户可能记错了快捷键
251-
addFailEffect();
261+
// 使用event.isComposing和自定义isComposing双重检查
262+
if (!(event.isComposing || isComposing)) {
263+
const enterKeyDetail = getEnterKey(event);
264+
if (textNodeExitEditMode === enterKeyDetail) {
265+
// 用户想退出编辑
266+
exitEditMode();
267+
addSuccessEffect();
268+
} else if (textNodeContentLineBreak === enterKeyDetail) {
269+
// 用户想换行
270+
breakLine();
271+
} else {
272+
// 用户可能记错了快捷键
273+
addFailEffect();
274+
}
252275
}
253276
}
254277
});

app/src/core/stage/stageManager/StageManager.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import { TextNode } from "../stageObject/entity/TextNode";
2828
import { UrlNode } from "../stageObject/entity/UrlNode";
2929
import { GraphMethods } from "./basicMethods/GraphMethods";
3030
import { StageDeleteManager } from "./concreteMethods/StageDeleteManager";
31-
import { StageNodeAdder } from "./concreteMethods/stageNodeAdder";
31+
import { StageNodeAdder } from "./concreteMethods/StageNodeAdder";
3232
import { StageNodeConnector } from "./concreteMethods/StageNodeConnector";
3333
import { StageObjectSelectCounter } from "./concreteMethods/StageObjectSelectCounter";
3434
import { StageSectionInOutManager } from "./concreteMethods/StageSectionInOutManager";

0 commit comments

Comments
 (0)