@@ -90,9 +90,17 @@ export namespace InputElement {
90
90
document . body . removeEventListener ( "mousedown" , onOutsideClick ) ;
91
91
removeElement ( ) ;
92
92
} ) ;
93
+ let isComposing = false ;
94
+ inputElement . addEventListener ( "compositionstart" , ( ) => {
95
+ isComposing = true ;
96
+ } ) ;
97
+ inputElement . addEventListener ( "compositionend" , ( ) => {
98
+ isComposing = false ;
99
+ } ) ;
100
+
93
101
inputElement . addEventListener ( "keydown" , ( event ) => {
94
102
event . stopPropagation ( ) ;
95
- if ( event . key === "Enter" ) {
103
+ if ( event . key === "Enter" && ! isComposing ) {
96
104
resolve ( inputElement . value ) ;
97
105
onChange ( inputElement . value ) ;
98
106
document . body . removeEventListener ( "mousedown" , onOutsideClick ) ;
@@ -197,7 +205,19 @@ export namespace InputElement {
197
205
document . body . removeEventListener ( "mousedown" , onOutsideClick ) ;
198
206
removeElement ( ) ;
199
207
} ) ;
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
+
200
219
textareaElement . addEventListener ( "keydown" , ( event ) => {
220
+ console . log ( event . key , "keydown" ) ;
201
221
event . stopPropagation ( ) ;
202
222
if ( event . key === "Tab" ) {
203
223
// 防止tab切换到其他按钮
@@ -238,17 +258,20 @@ export namespace InputElement {
238
258
239
259
if ( event . key === "Enter" ) {
240
260
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
+ }
252
275
}
253
276
}
254
277
} ) ;
0 commit comments