当前位置: 首页 > 知识库问答 >
问题:

在React中的div上不工作的onKeyDown事件

钱宇
2023-03-14

我想在React中的div上使用keyDown事件。我愿意:

  componentWillMount() {
      document.addEventListener("keydown", this.onKeyPressed.bind(this));
  }

  componentWillUnmount() {
      document.removeEventListener("keydown", this.onKeyPressed.bind(this));
  }      
  
  onKeyPressed(e) {
    console.log(e.keyCode);
  }
    
  render() {
    let player = this.props.boards.dungeons[this.props.boards.currentBoard].player;
    return (
      <div 
        className="player"
        style={{ position: "absolute" }}
        onKeyDown={this.onKeyPressed} // not working
      >
        <div className="light-circle">
          <div className="image-wrapper">
            <img src={IMG_URL+player.img} />
          </div>
        </div>
      </div>
    )
  }

它工作的很好,但我想做更多的反应风格。我试过了

onKeyDown={this.onKeyPressed}

在组件上。但它没有反应。我记得它对输入元素有效。

代码笔

我怎么做?

共有3个答案

闻人花蜂
2023-03-14

您在纯Javascript中考虑的太多了。摆脱那些React生命周期方法的侦听器,使用事件。键而不是事件。keyCode(因为这不是JS事件对象,所以它是一个事件)。您的整个组件可以像这样简单(假设您没有在构造函数中绑定方法)。

onKeyPressed(e) {
  console.log(e.key);
}

render() {
  let player = this.props.boards.dungeons[this.props.boards.currentBoard].player;
  return (
    <div 
      className="player"
      style={{ position: "absolute" }}
      onKeyDown={this.onKeyPressed}
    >
      <div className="light-circle">
        <div className="image-wrapper">
          <img src={IMG_URL+player.img} />
        </div>
      </div>
    </div>
  )
}
徐凌
2023-03-14

你需要这样写

<div 
    className="player"
    style={{ position: "absolute" }}
    onKeyDown={this.onKeyPressed}
    tabIndex="0"
  >

如果按下on键未绑定到,则尝试使用箭头函数重写它或在组件构造函数中绑定它。

劳和歌
2023-03-14

您应该使用tabIndex属性来监听React中div上的onKeyDown事件。设置tabIndex="0"应该触发处理程序。

 类似资料:
  • 问题内容: 我想在React中的div上使用keyDown事件。我做: 它工作正常,但我想以React风格做更多。我试过了 在组件上。但是它没有反应。我记得它可以处理输入元素。 码笔 我该怎么做? 问题答案: 您应该使用 tabIndex 属性,以便能够在React中的div上监听onKeyDown事件。设置tabIndex =“ 0”应该会触发您的处理程序。

  • 我创建了一个反应父组件,它将一些道具传递给它的子组件,并持有一个onclick函数。当单击产品组件时,onclick函数应该console.log'WORKED',这不起作用,控制台上没有显示任何内容。我不明白我错在哪里,这应该是如此简单。我是不是犯了一个我一直忽略的愚蠢错误? 这是我的父组件代码: 以下是产品(子)组件的代码:

  • 问题内容: 我已经尝试通过在MapView.Marker选项卡中调用onPress方法,但是它不起作用。 这种跟踪标记点击的方法: 在render方法中,声明了Map组件以在地图上显示地图和标记。在onPress方法中,我调用了自定义方法markerClicked()。仍然我没有得到结果。 问题答案: 你只需要添加的标签。自定义标注-您可以根据需要自定义标记信息点击窗口。 我已经习惯了,这样您就可

  • 这里是我正在工作的站点:https://cutt.ly/sxosoty问题是,如果你点击图像滑块,它不会检测到点击事件“只在移动设备上”。在桌面上工作。但似乎点击移动设备上的特定div是不起作用的。 null null 它的工作为整个页面,但不是在这个div“滑列表拖动”,我不确定是什么阻止点击甚至。任何帮助都是非常感谢的!

  • 问题内容: 当我将鼠标悬停在DIV上时,它将触发将鼠标悬停在父DIV上,这对我来说似乎是错误的。我只希望“突出显示”效果在子DIV 上起作用。 问题答案: 根据定义,将鼠标悬停在孩子上,也将鼠标悬停在父母上。html事件中没有“阻止”。 有两个方法链,气泡和捕获。 W3C事件模型中发生的任何事件都首先被捕获,直到到达目标元素,然后再次冒泡。 http://www.quirksmode.org/js

  • 我一直在努力解决这个问题,但是即使有这么多解决方案,即使在堆栈上,我也找不到一个符合我需求的。 我想将一个img放在具有“overflow:hidden”的包装div中,这样图像就可以有任何可能的宽度。问题是包装器div与包含文本的同一高度的另一个div对齐。 我尝试过绝对定位的解决方案,但由于宽度和高度都没有设置在特定数量的像素中,这将无法工作,图像将不再显示。 试图使用flexbox也以一团糟

  • 我完全卡住时集成HOC在我的react.js项目。 这是我的路线文件 我对此完全崩溃了,但没有摆脱那个问题。为什么我的控制台中的不显示值 有任何问题与反应和反应路由器的版本 提前谢谢你!!!

  • 我正在用Libgdx做一个简单的平台游戏。。。我让玩家向左移动,向右移动,然后跳跃。该代码在桌面上运行良好,但在Android设备上,当玩家向左或向右移动时,不会触发跳转。看起来很奇怪。这是我的密码。。。 私有空updatePlayerForUserInput(浮点deltaTime){ 我从mzencher在 https://github.com/libgdx/libgdx/blob/maste