首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android Cordova应用程序Nexus Player上打开虚拟键盘输入第一个字符

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

Stack Overflow用户
提问于 2018-07-19 13:37:30
回答 1查看 103关注 0票数 4

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

我有一个ReactJS应用程序,它使用Cordova为Android构建了一个应用程序。支持的设备之一是Nexus播放器。由于某种原因,只有在nexus播放器上,当我打开虚拟键盘时,它会立即输入第一个字符。这通常是我把字符选择器放在最后的地方。

因此,假设我有一个电子邮件输入,如果我输入myemail@email.com并转到下一个输入字段,当我打开虚拟键盘时,它将输入m。当然,如果用户离开虚拟键盘(比如Enter键),这将阻止它被打开和/或立即提交表单,那么这将从一个小麻烦变成一个实际问题。我目前对如何处理这个问题没有什么想法。

对于输入,我使用一个受控组件并通过状态设置它,因此呈现函数如下所示:

代码语言:javascript
运行
复制
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>
  )
}

现在..。因为这是一个导航应用程序,所以我有一个键盘监听器,它可以监听我在组件上从遥控器上按下的任何键。我认为这可能是处理这个问题的方法。

代码语言:javascript
运行
复制
  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播放器。通常,当我打开虚拟键盘时,我能做些什么来防止这个额外的键被按下呢?

EN

回答 1

Stack Overflow用户

发布于 2018-07-31 13:24:00

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51424134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档