代码之家  ›  专栏  ›  技术社区  ›  theJuls

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

  •  4
  • theJuls  · 技术社区  · 7 年前

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

    我有一个ReactJS应用程序,它使用Cordova为Android构建。支持的设备之一是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')
          }
        }
      })
    

    作为控制台。记录状态,这将按预期工作。我需要知道的是如何阻止第一把钥匙被触发。我尝试了一些方法,但没有任何效果:

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

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   fattalico    7 年前

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

    推荐文章