首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入块热键

输入块热键
EN

Stack Overflow用户
提问于 2020-01-22 08:55:40
回答 1查看 507关注 0票数 1

使用hotkey.js绑定热键引用下面的片段。输入阻塞我的热键,因为焦点。现在,无论输入是否集中,我都需要启用热键。

代码语言:javascript
复制
import React from 'react'
import hotkeys from 'hotkeys-js'

export default function Example (props) {
  useEffect(() => {
    hotkeys('Enter', event => {
      event.preventDefault()

      return props.handleSubmit()
    })

    return () => {
      hotkeys.unbind('Enter')
    }
  }, [])

  return (
    <div>
      <input type='text' autofocus />
      <button onClick={props.handleSubmit}>Submit</button>
    </div>
  )
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-22 09:28:20

我在这里发现了三个错误,

  1. 默认情况下,对于输入,将禁用热键,选择TEXTAREA元素。需要添加代码块以启用热键。
  2. 您不需要导入useEffect
  3. 我认为hotKeys回调不需要返回。

添加此代码块以启用阻塞元素中的热键。

代码语言:javascript
复制
 hotkeys.filter = function(event){
  var tagName = (event.target || event.srcElement).tagName;
  hotkeys.setScope(/^(INPUT|TEXTAREA|SELECT)$/.test(tagName) ? 'input' : 'other');
  return true;
}

检查工作小提琴

这是工作小提琴示例代码。

代码语言:javascript
复制
import React, {useEffect} from 'react'
import hotkeys from 'hotkeys-js'

export default function Hello (props) {
  useEffect(() => {
    hotkeys.filter = function(event){
      var tagName = (event.target || event.srcElement).tagName;
      hotkeys.setScope(/^(INPUT|TEXTAREA|SELECT)$/.test(tagName) ? 
      'input' : 'other');
      return true;
    }
    hotkeys('Enter', event => {
      event.stopPropagation()
      event.preventDefault()
      console.log('Hotkey Pressed')
      props.handleSubmit(); // this should do the job.
    })

    return () => {
      hotkeys.unbind('Enter')
    }
  }, [])

  return (
    <div>
      <input type='text' autoFocus />
      <button onClick={props.handleSubmit}
      >Submit</button>
    </div>
  )
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59855852

复制
相关文章

相似问题

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