4

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

我有一个使用 Cordova 为 Android 构建的 ReactJS 应用程序。支持的设备之一是 Nexus Player。出于某种原因,只有在 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 播放器。通常,我可以做些什么来防止在打开虚拟键盘时按下额外的键?

4

1 回答 1

0

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

于 2018-07-31T13:24:00.427 回答