Javascript 在Android Cordova应用程序Nexus Player上打开虚拟键盘时键入第一个字符

Javascript 在Android Cordova应用程序Nexus Player上打开虚拟键盘时键入第一个字符,javascript,android,reactjs,cordova,nexus-player,Javascript,Android,Reactjs,Cordova,Nexus Player,我知道这是一个关于特定设备的非常具体的问题,但我需要了解如何防止这种情况发生 我有一个ReactJS应用程序,它使用Cordova为Android构建。支持的设备之一是Nexus播放器。出于某种原因,只有在nexus播放器上,当我打开虚拟键盘时,它会立即输入第一个字符。这通常是我最后离开字符选择器的地方 如果我键入myemail@email.com并转到下一个输入字段,当我打开虚拟键盘时,它将键入m。当然,如果用户离开虚拟键盘(比如说,Enter键),这将从一个小麻烦变成一个实际问题,这将阻止虚

我知道这是一个关于特定设备的非常具体的问题,但我需要了解如何防止这种情况发生

我有一个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>
  )
}
正如console.log所述,这可以按预期工作。我需要知道的是如何阻止第一把钥匙被引爆。我尝试了一些方法,但没有任何效果:

  • evt.stopPropagation()
    :不执行任何操作,在打开虚拟键盘时仍按第一个键
  • evt.stopImmediatePropagation()
    :停止整个过程,直到打开钥匙后仍不允许任何钥匙工作

我不知道还能做什么。我想它甚至不必只适用于nexus播放器。一般来说,当我打开虚拟键盘时,我能做些什么来防止额外的按键被按下?

这听起来有点愚蠢,但值得一试。 试着关掉键盘,取出电池,稍等片刻,然后把它们放回去再试一次?当它重新启动时,可能不会触发第一个键。
另外,不确定所附代码为什么相关?

它不是实际的物理键盘。当您选择需要键入内容的表单时,会打开虚拟键盘。代码是相关的,因为这就是我处理输入的方式,也是我试图阻止它立即键入内容的方式。也许将代码从
evt.stopPropagation()
更改为
event.stopPropagation()
会有所不同?这只会阻止执行任何父处理程序——这可能会阻止“m”单击冒泡到父元素。
  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')
      }
    }
  })