【发布时间】:2020-12-22 16:03:22
【问题描述】:
默认情况下,MaterialUI 的 Select 组件在选择一个选项后会保持焦点。这种行为可以在他们docs的所有示例中看到
我希望元素在选择某些内容后模糊。这是我的代码目前的样子:
const App = () => {
const [selectedValue, setSelectedValue] = useState('')
const selectElement = useRef(null);
return (
<Select
native
ref={selectElement}
value={selectedValue}
onChange={(evt) => {
setSelectedValue(evt.target.value)
// Attempt at blurring the element upon selection using the useRef:
selectElement.current.blur(); // Nothing happens
// Attempt at blurring the element upon selection using activeElement:
document.activeElement.blur(); // Get Error: "Property 'blur' does not exist on type 'Element'."
}}
>
<option value='option 1'>Option 1</option>
<option value='option 2'>Option 2</option>
<option value='option 3'>Option 3</option>
</Select>
);
};
正如您在代码中看到的那样,我尝试使用我发现的两种不同方法来做到这一点:
-
通过
useRef():这没有任何作用,没有错误或任何东西,但不会模糊我的元素 -
通过
document.activeElement:这给了我一个错误,显然属性blur在类型元素上不存在。
在选择选项时模糊我的 Select 组件的正确方法是什么?
【问题讨论】:
-
您需要延迟模糊效果。选择后焦点元素不在屏幕上。
-
看起来您正在尝试模糊选项,但我认为您想模糊选择本身。试试
selectElement.blur();或evt.target.blur(); -
请注意,ref 被转发到根元素(包装 div),而不是
select,这就是该解决方案什么都不做的原因。 -
您看到的错误看起来与 TypeScript 相关,但您没有在问题/代码中输入任何内容。
-
我很好奇你为什么要模糊选择。从可访问性的角度来看,这似乎是一件可怕的事情。
标签: javascript reactjs material-ui dom-events