MUI - 单击 TextField 中的任意位置时打开日期选择器
MUI - Open datepicker when clicking anywhere in the TextField
我有一个日期选择器,我想在用户单击字段中的任意位置而不仅仅是日历图标时显示它。
这是选择器
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
component in the @mui/lab
package. If you want a picker to be opened after when the user clicked inside the TextField
, use MobileDatePicker
, this doesn't have the calendar icon though, see 答案,如果你想要的话。
<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
状态并在 TextField
被点击时将其设置为 true
:
const [open, setOpen] = useState(false);
return (
<KeyboardDatePicker
open={open}
onOpen={() => setOpen(true)}
onClose={() => setOpen(false)}
TextFieldComponent={(props) => (
<TextField {...props} onClick={(e) => setOpen(true)} />
)}
{...other}
/>
);
现场演示
我有一个日期选择器,我想在用户单击字段中的任意位置而不仅仅是日历图标时显示它。
这是选择器
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
component in the @mui/lab
package. If you want a picker to be opened after when the user clicked inside the TextField
, use MobileDatePicker
, this doesn't have the calendar icon though, see
<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
状态并在 TextField
被点击时将其设置为 true
:
const [open, setOpen] = useState(false);
return (
<KeyboardDatePicker
open={open}
onOpen={() => setOpen(true)}
onClose={() => setOpen(false)}
TextFieldComponent={(props) => (
<TextField {...props} onClick={(e) => setOpen(true)} />
)}
{...other}
/>
);