You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS中禁止用户手动输入日期字段,仅允许选择日期

嘿,这问题我熟!在React的JSX里实现禁止手动编辑日期输入其实很简单,只要把原生的onkeydown="return false"转换成React的合成事件写法就行,我给你一步步说:

首先,React里的事件名是驼峰命名的,所以要用onKeyDown而不是小写的onkeydown。然后在事件处理函数里调用e.preventDefault()就能阻止键盘输入的默认行为,和原生的return false效果完全一致。

针对你的代码,只需要给<input>标签加上这个事件处理就行,修改后的完整代码如下:

export default observer(({ field, type = 'date', readOnly = false }) => {
  return (
    <div className="form__input-group">
      <input
        className="form_date"
        id={field.id}
        min={new Date().toISOString().split('T')[0]}
        aria-describedby="name-desc"
        {...field.bind({ type })}
        readOnly={readOnly}
        // 新增这行,阻止所有键盘输入行为
        onKeyDown={(e) => e.preventDefault()}
      />
    </div>
  );
});

这里还有几个细节要注意:

  • 一定要把onKeyDown写在{...field.bind({ type })}的后面,如果你的表单绑定方法里也定义了onKeyDown事件,这样才能确保我们的阻止逻辑覆盖原有行为。
  • 如果想更简洁,也可以直接写成onKeyDown={() => false},不过调用e.preventDefault()的语义更清晰,可读性更强。
  • 如果你尝试过直接用readOnly属性,部分浏览器可能会连日期选择器一起禁用,所以用onKeyDown的方法兼容性更好,完全满足「只能通过选择器选日期」的需求。

内容的提问来源于stack exchange,提问作者Rocker rock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:32:53