react中键盘事件无法在div上触发的问题解决

通常情况下在div上是无法聚焦触发键盘事件

<div
    id="HelloWorld01"
    onKeyUp={event => {
        console.log(event, event.keyCode, "event");
    }}
>
    <Card bodyStyle={{ paddingTop: 14 }}>
        <ContractView {...detail} />
    </Card>
</div>

通过添加 tabindex="-1" 来解决

<div
    id="HelloWorld01"
    tabIndex="-1"
    onKeyUp={event => {
        console.log(event, event.keyCode, "event");
    }}
>
    <Card bodyStyle={{ paddingTop: 14 }}>
        <ContractView {...detail} />
    </Card>
</div>

tabindex 接受一个整数作为值,具有不同的结果,具体取决于整数的值:

  • tabindex=负值 (通常是tabindex=“-1”),表示元素是可聚焦的,但是不能通过键盘导航来访问到该元素,用JS做页面小组件内部键盘导航的时候非常有用。

  • tabindex=“0” ,表示元素是可聚焦的,并且可以通过键盘导航来聚焦到该元素,它的相对顺序是当前处于的DOM结构来决定的。

  • tabindex=正值,表示元素是可聚焦的,并且可以通过键盘导航来访问到该元素;它的相对顺序按照tabindex 的数值递增而滞后获焦。如果多个元素拥有相同的 tabindex,它们的相对顺序按照他们在当前DOM中的先后顺序决定。

  • 根据键盘序列导航的顺序,值为 0 、非法值、或者没有 tabindex 值的元素应该放置在 tabindex 值为正值的元素后面。

MDN参考https://developer.mozilla.org/zh-CN/docs/Web/HTML/Global_attributes/tabindex

React参考https://zh-hans.reactjs.org/docs/events.html

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React,我们可以使用class组件或函数组件将监听resize事件添加到div元素上。下面是使用class组件的示例: 1. 首先,在class组件的构造函数初始化一个状态变量,用于保存div的宽度和高度: ```javascript class MyComponent extends React.Component { constructor(props) { super(props); this.state = { width: 0, height: 0, }; } ... } ``` 2. 接下来,在组件挂载完成后,我们可以通过ref获取到div元素的引用,并添加resize事件监听器: ```javascript class MyComponent extends React.Component { constructor(props) { super(props); this.state = { width: 0, height: 0, }; this.divRef = React.createRef(); } componentDidMount() { // 获取div元素引用 const div = this.divRef.current; // 添加resize事件监听器 window.addEventListener('resize', this.handleResize); // 更新div的初始宽度和高度 this.setState({ width: div.offsetWidth, height: div.offsetHeight, }); } componentWillUnmount() { // 移除resize事件监听器 window.removeEventListener('resize', this.handleResize); } handleResize = () => { // 获取更新后的div宽度和高度 const div = this.divRef.current; const width = div.offsetWidth; const height = div.offsetHeight; // 更新状态 this.setState({ width, height, }); } render() { return ( <div ref={this.divRef}> {/* 其他组件内容 */} </div> ); } } ``` 通过以上步骤,我们成功地将resize事件监听添加到了div元素上,并且在窗口尺寸改变时更新了div的宽度和高度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值