在非常特定的设备(Nexus Player)上运行时,我在Cordova应用程序上使用虚拟键盘时遇到一些麻烦。
基本上,它是在完成打开之前键入最后键入的键,从而导致用户在打开虚拟键盘时始终键入最后一个键。因此,例如:如果键入me@email.com
,请关闭虚拟键盘,当我重新打开虚拟键盘时,它将立即键入最后一个键,因此在这种情况下它将变为me@email.comm
。
我正在尝试使用Cordova插件(Ionic Keyboard)中的事件来检查键盘是否打开,并且我注意到每次打开键盘时,事情发生的顺序都是不同的。 / p>
这是我的活动:
window.addEventListener('keyboardWillShow', () => {
console.log('Keyboard will still show! DONT TYPE!')
this.allowToType = false
})
window.addEventListener('keyboardDidShow', () => {
console.log('Keyboard did show! DONT TYPE!')
this.allowToType = true
})
window.addEventListener('keyboardDidHide', () => {
console.log('Keyboard did hide! RESET THE STATE!')
this.allowToType = false
})
这是我在render()
方法中的输入内容:
<input
type='text'
name='email'
value={email || ''}
onChange={(evt) => this.handleOnChange(evt) }
data-focusable
/>
最后,this.handleOnChange(evt)
:
handleOnChange (evt) {
console.log(evt.target.value, this.allowToType)
if (this.allowToType) {
this.props.setEmail(evt.target.value)
} else {
console.warn('Keyboard is not visible!')
}
}
有时会在打开虚拟键盘之前和之后触发handleOnChange
方法。我认为这可能是导致问题的原因之一。
我能做些什么来控制与键盘相比何时触发onChange
事件?
我什至必须要做的全部原因是因为Nexus Player中的虚拟键盘使用我在实际打开之前按下的最后一个键来填充输入。如果有另一种方法可以解决此问题,将不胜感激。