在日语输入中输入keyup事件

时间:2017-10-18 14:42:36

标签: javascript input cjk

我有一个输入字段,我正在收听键盘事件。

使用日语输入法我开始输入字符,事件没有被触发;当输入字符被转换为平假名时会出现这种情况,并且会出现一个下拉菜单,因此用户可以选择它们的片假名或汉字版本。当用户键入时,字符显示为带下划线,用户可以通过按Enter键选择它(kanas / kanji)。之后,文本不再加下划线,并且已经提交了#39;到输入文本。

预期此行为与输入方法的工作方式一样。

但是,在文本提交之前,我并不期待接收任何键盘事件(即使那时我也希望更改事件不是键盘),因为输入是输入方法工作方式的一部分。

我正在收听键盘事件,因为我需要在用户释放回车键时触发操作。

我在输入西方和日本输入法输入时分析了事件数据,但未发现任何相关差异。

哪种方法可以解决这个问题?

此致

1 个答案:

答案 0 :(得分:0)

您可以通过以下技术来实现:

  • 使用textarea代替input
  • 使用onInput侦听器代替onKeyDown
  • 检测onInput中的换行符

相关的JavaScript代码:

function onInput(evt) {
   let val = evt.target.value;
   const nlAt = val.indexOf('\n');
   if (nlAt >= 0) {
       // A newline was detected in the input!
       // Remove the newline from the field:
       val = val.replace(/\n/g, '');
       evt.target.value = val;
       // And fire our custom onReturnKey handler:
       onReturnKey(val);
   }
}

您可以尝试此CodePen