问题:在开发公司的一个项目(scala、scalajs开发)时,遇到中文输入法无法正常输入的情况,如下图所示。

经过同学提醒后,发现是oninput的问题,在中文输入法中,每输入一个拼音都会触发一次oninput而不是每输入一个字。那么解决办法呢,答案是使用compositionstart事件和compositionend事件。参考其他博客整理了一下js和scalajs版本。
js版本
var typing = false;
$('#ipt').on('compositionstart',function(){
typing = true;
})
$('#ipt').on('compositionend',function(){
typing = false;
})
$('#ipt').on('input',function(){
setTimeout(function() {
if(!typing) {
}
},0);
})
$('#ipt').on('input',function(){
if(!typing) {
}
})
改写的scalajs版本
var isInputZh = false
<input mhtml-onmount={(e: HTMLElement) =>
e.addEventListener("compositionstart", (e: Event) => {
isInputZh = true
})
e.addEventListener("compositionend", (e: Event) => {
isInputZh = false
checkWord(e.target.asInstanceOf[Input])
})
}
oninput={(e: Event) =>
checkWord(e.target.asInstanceOf[Input]);
}>
</input>
最后来看看解决后的效果:
