当input
元素被禁用时,它不会被任何事件处理。
<input disabled />
如何为任何元素实现这一点(例如一个span
元素)?
我试过使用pointer-events: "none"
,但它只能阻止点击事件。其他事件如onKeyDown
仍然可以被调用。
下面是一个例子:
import * as React from "react";
export default function UnstyledSwitches() {
return (
<div>
<span tabIndex={0} onKeyDown={() => console.log("clicked")}>
test
</span>
</div>
);
}
https://codesandbox.io/s/base-cra-typescript-forked-43708i?file=/src/App.tsx
将焦点放在“范围”选项卡上,然后单击空格键。将调用提供给onKeyDown
props的函数。我不希望函数被调用。
2条答案
按热度按时间46qrfjad1#
一种解决方案是将
disabled
属性添加到元素中,然后使用javascript将eventListeners
限制为未禁用的元素。例如:
在html中:
在js中:
但是,如果动态禁用/启用元素,则需要在元素状态的每次更改之后添加eventListeners。
biswetbf2#
pointerEvents和tabIndex
该问题询问如何防止在span上进行键盘输入。但是,问题中包含的代码会为元素的tabIndex赋值。设置tabIndex(或contentEditable)属性允许元素接收焦点沿着键盘事件。
从span中删除tabIndex可以阻止焦点和键盘事件,但不能阻止鼠标事件。要防止键盘和鼠标事件,请将pointerEvents设置为“none”。tabIndex设置似乎对span没有任何影响,但对输入可能有影响。
OP注意到pointerEvents“none”不起作用,但在代码片段中它起作用。原因尚不清楚,但可能是由于不同的测试方法。
React代码片段
该代码片段包含几个span元素,可以尝试使用不同的配置。