我知道这是一个关于特定设备的非常具体的问题,但是我需要一些关于如何在一般情况下防止这种情况发生的见解。
我有一个ReactJS应用程序,它使用Cordova为Android构建了一个应用程序。支持的设备之一是Nexus播放器。由于某种原因,只有在nexus播放器上,当我打开虚拟键盘时,它会立即输入第一个字符。这通常是我把字符选择器放在最后的地方。
因此,假设我有一个电子邮件输入,如果我输入myemail@email.com并转到下一个输入字段,当我打开虚拟键盘时,它将输入m。当然,如果用户离开虚拟键盘(比如Enter键),这将阻止它被打开和/或立即提交表单,那么这将从一个小麻烦变成一个实际问题。我目前对如何处理这个问题没有什么想法。
对于输入,我使用一个受控组件并通过状态设置它,因此呈现函数如下所示:
render () {
return (
<form onSubmit={onSubmit} role='form' className='form'>
<div className='form-group'>
<div data-focusable data-focus-container>
<input
type='text'
className='form-control'
value={myValue}
onChange={evt => this.setState({myValue: evt.target.value})}
data-focusable
/>
</div>
</div>
</form>
)
}现在..。因为这是一个导航应用程序,所以我有一个键盘监听器,它可以监听我在组件上从遥控器上按下的任何键。我认为这可能是处理这个问题的方法。
keydownHandler(evt) {
if (isDeviceNexuPlayer()) {
if (keyCodeIs('select', evt)) {
// do something to stop the first key from being immediately pressed
console.log('this is being called as expected')
}
}
})正如console.log所述,这一工作与预期的一样。我需要知道的是我怎样才能阻止第一把钥匙被解雇。我试过几件事,所以没有用:
evt.stopPropagation():什么也不做,打开虚拟键盘时仍按下第一个键evt.stopImmediatePropagation():停止整件事情,以至于它不允许任何键工作,即使它已经打开我不知道还能做什么。我想这甚至不一定只适用于nexus播放器。通常,当我打开虚拟键盘时,我能做些什么来防止这个额外的键被按下呢?
发布于 2018-07-31 13:24:00
这听起来有点愚蠢,但值得一试。试着关掉键盘,取出电池,等等,然后把它们放回去,再试一次?当它重新启动时,它可能不会触发第一个键。另外,不知道为什么附加的代码是相关的?
https://stackoverflow.com/questions/51424134
复制相似问题