ios限制输入框输入时,如果连续切换英文, 会呈现删除现象

问题

1.ios限制输入框只能输入数字,当连续输入英文时会删除前面输入的信息

操作

1. 用ios自带的原生键盘 2. 在输入时选择9宫格的键盘输入 3. 连续的点击按键

原因

我们用的input事件,我们有限制的需求,英文键盘连续输入时切换会移除上一次输入的逻辑导致

我们先输入的12 如我们连续的在9宫格ghi键上连续点两次,ios最终正常显示是会显示h 中间触发的事件变化是(会触发三次input事件) event.data第一次是g,第二次是null,第三次的h

如果我们在input事件中判断如果输入了非数字就给移除,结果:

还是上面同样的操作但是把我们的2给移除了 因为连续切换的时候, 在第一次的时候我们已经把最后输入的g(非数字)给移除了(第一次是12), 第二次会把最后一个输入值移除(切换的逻辑)(第二次是1), 由第三次来填充(第三次是1)

就感觉做了删除操作

解决方案

1. 要多用一个变量接收输入框的值 2. 初始化时也要给这个中间变量赋值 3. 每次输入校验过后显示在输入框的值都要赋值给这个中间变量 4. 输入时判断到event.data === null && 不是删除操作 时将中间变量赋值给输入框
  • event.data === null是因为在选择符号的时候event.data === undefined
  • 不是删除操作 应为删除按钮的event.data === null,
  • 监听keydome($event)事件,判断event.keycode === 8

以为可以用着两个属性解决,然而我错了

compositionstart 事件触发于一段文字的输入之前(类似于 keydown 事件,但是该事件仅在若干可见字符的输入之前,而这些可见字符的输入可能需要一连串的键盘操作、语音识别或者点击输入法的备选词)

compositionend 当文本段落的组成完成或取消时, compositionend 事件将被触发 (具有特殊字符的触发, 需要一系列键和其他输入, 如语音识别或移动中的字词建议)

又遇到一个问题,暂时没有解决

在使用搜狗输入法时,我先输入12,然后在英文键盘上输入qq,是不会直接填充到输入框但是还是触发了input事件(会把qq给移除掉),当我从键盘上选择qq填充到输入狂时触发了3次input事件,第1,2次是做删除操作,而且是keyCode===8的(跟键盘删除操作一样),第三次是替换,将qq替换上去,(12就被删除,qq被移除)这个就又成了删除操作了,这波操作竟然不触发compositionstart、compositionend

你可能感兴趣的:(ios限制输入框输入时,如果连续切换英文, 会呈现删除现象)