解决中文拼音输入法在input监听的问题
Aug 22, 2017
一、问题
在通过监听用户输入,将输入作为 Keyword 进行查询时(做了防抖)发现有如图问题,使用中文拼音输入法时,未选中所要的字词前,会自动将输入法分词过的拼音作为文本,由于实时监听输入,就存在将 ce’shi 作为 keyword 查询的问题了。
在这里,前端需要对拼音输入法的这种情况进行处理。
二、TL;DR 解决方法
可以借鉴 Vue.js
的处理方法,引入 compositionstart
和 compositionend
事件来捕获 IME(input method editor)
的启动和关闭。
这两个事件,目前是IE9+支持,移动端 Safari < 10.2 & UIWebView 暂时无法触发,因此可以作为 PC 端产品的靠谱方案。
实现:
|
|
三、怎么更放心地用
这里还是看看 Vue.js 的代码:src/platforms/web/runtime/directives/model.js
|
|
For languages that require an IME (Chinese, Japanese, Korean etc.), you’ll notice that v-model doesn’t get updated during IME composition. If you want to cater for these updates as well, use input event instead.
Vue.js 在编写 v-model
这一核心指令时用到了 compositionstart
和 compositionend
这两个事件,保证在输入框交互过程中的文本并不会触发 v-model
更新,在源码中也是针对 Safari 做了兼容处理。