|
|
@@ -12,7 +12,6 @@
|
|
|
@focus="focused = true"
|
|
|
@blur="focused = false"
|
|
|
@keydown="onKeydown"
|
|
|
- @press-enter="onEnter"
|
|
|
/>
|
|
|
|
|
|
<!-- 附件 chips:选择即上传,上传中显进度、失败可移除 -->
|
|
|
@@ -294,14 +293,17 @@
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- /** 中文输入法组合中的 Enter 不应触发发送 */
|
|
|
- let composing = false;
|
|
|
+ /**
|
|
|
+ * Enter 发送 / Shift+Enter 换行。
|
|
|
+ *
|
|
|
+ * 输入法状态必须取当前这次 keydown 事件本身:antd 先派发 pressEnter 再派发 keydown,
|
|
|
+ * 若改在 pressEnter 里读上一次按键留下的状态,中文输入法「回车确认候选词」之后的那次
|
|
|
+ * 回车会沿用旧的组合中标记,被当成候选词确认而只换行、不发送。
|
|
|
+ */
|
|
|
function onKeydown(e: KeyboardEvent) {
|
|
|
- composing = (e as any).isComposing === true || e.keyCode === 229;
|
|
|
- }
|
|
|
-
|
|
|
- function onEnter(e: KeyboardEvent) {
|
|
|
- if (composing) return;
|
|
|
+ if (e.key !== 'Enter') return;
|
|
|
+ // 中文输入法组合中的回车是确认候选词,不能当发送
|
|
|
+ if (e.isComposing || e.keyCode === 229) return;
|
|
|
// Shift+Enter 由 textarea 默认换行
|
|
|
if (e.shiftKey) return;
|
|
|
e.preventDefault();
|