我知道这是一个关于特定设备的非常具体的问题,但是我需要一些关于如何在一般情况下防止这种情况发生的见解。
我有一个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
复制相似问题