css - MUI - 单击文本字段中的任意位置时打开日期选择器
问题描述
我有一个日期选择器,我想在用户单击字段中的任何位置时显示它,而不仅仅是日历图标上。
这是选择器
export function DatePickerField(props) {
......
return (
<Grid container>
<MuiPickersUtilsProvider utils={DateFnsUtils}>
<KeyboardDatePicker
{...field}
{...props}
disableToolbar
inputVariant="outlined"
value={selectedDate}
onChange={_onChange}
error={isError}
autoOk
invalidDateMessage={isError && error}
helperText={isError && error}
/>
</MuiPickersUtilsProvider>
</Grid>
);
}
我需要这样做,因为如果手动输入日期,它不会引发错误,但我会invalid date
输入表单数据。
单击字段时如何显示选择器?
解决方案
MUI v5在包中添加了DatePicker
组件@mui/lab
。如果您希望在用户单击 , 后打开选择器TextField
,使用MobileDatePicker
,虽然它没有日历图标,但如果您想要一个,请参阅此答案。
<MobileDatePicker
{...}
renderInput={(params) => <TextField {...params} />}
/>
然而DesktopDatePicker
确实有日历图标,但是你必须编写额外的代码来控制open
状态并告诉选择器在TextField
被点击时打开:
<DatePicker
open={open}
onOpen={() => setOpen(true)}
onClose={() => setOpen(false)}
renderInput={(params) => {
return (
<TextField
{...params}
onClick={(e) => setOpen(true)}
/>
);
}}
/>
原始答案
您可以控制KeyboardDatePicker
的open
状态并将其设置为单击true
时TextField
:
const [open, setOpen] = useState(false);
return (
<KeyboardDatePicker
open={open}
onOpen={() => setOpen(true)}
onClose={() => setOpen(false)}
TextFieldComponent={(props) => (
<TextField {...props} onClick={(e) => setOpen(true)} />
)}
{...other}
/>
);
现场演示
推荐阅读
- python - Selenium Headless chrome 运行速度要慢得多
- python - Git:如何保存并返回到特定版本
- swiftui - @State 和 CoreData 的 SwiftUI 预览问题
- python - 从两个 CSV 文件中读取
- java - 必需的列表参数“ids”不存在
- linux - 可以在 Linux 机器上安装 Payara 服务器多个版本
- python-3.x - /users/signup/“password_1”处的 MultiValueDictKeyError
- c - cs50 PSET4的模糊功能,错误在哪里?
- c - 在子线程中终止使用 system() 启动的程序
- c++ - 有根二叉搜索树。保持与其父级的链接