中文输入时刚敲拼音就发起搜索,结果全是拼音匹配的乱数据。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

let composing = false;
input.addEventListener('compositionstart', () => composing = true);
input.addEventListener('compositionend', () => { composing = false; search(); });

输入事件在组合输入过程中就触发了逻辑,没有判断组合状态。这一点先确认清楚,后面就不用反复试。

「输入法组合事件」这类改动最怕改一半,回滚脚本先准备好,再动生产。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

具体做法是,监听组合开始与结束;组合期间不触发搜索;结束后再统一处理。

改完照着核一遍,中文选字完成后才发起搜索,结果正确。

作者 9823189