我在 React 控制的组件中有一个带有关联数据列表的 html5 输入。我想在单击输入字段或接收焦点时清除文本,以便显示所有选项以供选择。我在这个问题中遵循了 Alfred 的出色回答,但无法在 React 控制的组件中获得完全相同的结果。不幸的是,在 onClick 处理程序中调用 blur 会阻止我的用户输入多个字符,因为焦点(当然)丢失了。
我怎样才能保持用户可以键入但清除文本并在单击文本框时显示完整选项集的能力?
import React, { useState } from "react";
const MyForm = () => {
const [options, setOptions] = useState(["Apples", "Oranges", "Bananas", "Grapes"]);
const handleChange = (event) => {
event.target.blur();
};
const clear = (event) => {
event.target.value = "";
};
return (
<>
<input
type="input"
list="optionsList"
onChange={handleChange}
onFocus={clear}
placeholder="Select an option"
/>
<datalist id="optionsList">
{options.map((o) => (
<option key={o}>{o}</option>
))}
</datalist>
</>
);
};
export default MyForm;
请注意,我还尝试了一个调用 clear onClick 而不是 onFocus 的版本。这使我无需在 handleChanges 中调用 blur() 从而解决了打字问题。但是,这需要我单击两次以查看完整的选项集,因为选项列表似乎在清除该框之前已显示。